STL 中 vector 的一些使用方法
看了 《C++标准库》这本书关于 vector 的一章,感觉学到了很多。
1. reserve() 只会扩充 vector 的 capacity ,而不会缩小它。因此即使删除元素,其 reference, pointer, iterator 也不会失效,但是插入动作(insert)会导致这些成员失效,因为 insert() 会导致 vector 内存的重新分配。
2. shrink_to_fit() 可以缩减vector没有用的容量,swap 两个 vector 会使它们的 capacity 互换。
3. assign() 可以像构造函数的参数一样给 vector 重新赋值。
4. vector 提供了很少的越界检查,包括 front(), back(), operator[] 都没有检查,但是 at() 方法会检查越界,并且抛出 out_of_range 异常。
5. vector 迭代器一般持续有效,除非 1) 在较小位置插入或移除元素 2)容量变化引起内存重新分配
6. vector<bool> 是特化版本,提供了 filp() 方法来方便取补。
另外,还看到了关于迭代器实现的一个小问题,迭代器可以按照 辅助类 或者 普通指针 来实现,c++规定内置类型的临时变量是不能修改的,而 class 的临时值是可以修改的。这样你能不能用 ++v.begin() 就和具体的实现相关了。