August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
回顾目前的vector版本,我们会发现它没有对数据访问进行范围检查。operator[]的实现十分简单:
那么,考虑下面代码:
上述代码能够编译成功并运行,但它访问了不属于我们的vector对象的内存空间。这可能会造成严重后果!在实际程序中,这样的代码是不可接受的。下面我们将完善vector以处理此问题。最简单的方法是增加一个名为at()的操作,可实现带范围检查的元素访问:
有了at(),我们可以编写如下代码:
在这段代码中,我们通过at()进行带范围检查的数据访问,并且捕获out_of_range以避免非法的数据访问。
一般做法是,当我们确定元素索引有效时,用下标操作[]进行数据访问;而当元素索引可能造成越界时,应使用at()。