现在的位置: 首页 > 综合 > 正文

STL之vectr

2013年11月05日 ⁄ 综合 ⁄ 共 630字 ⁄ 字号 评论关闭

这几天看了侯捷的《STL源码剖析》的vector相关部分,做一些记录

1.vector的内存排列与数组一样是连续的

2.vector的迭代器本质就是特例类的指针,如vector<int>::iterator即int*

3.vector的size和容量并不相同,容量永远大于等于size;vector会申请多余的内存,以避免每次insert元素时申请释放内存已经拷贝的消耗

4.当往vector中insert时,若insert的个数大于vector的备用空间;vector会申请一块更大的内存(一般是原大小的两倍,两倍不够另作处理), 然后将原内容拷贝过来,然后才开始在原内容上构造新元素,最后释放原空间。

5.由4可知,原本指向原内存块的迭代器(即指针)随着原内存被释放将会失效,不可再使用。

6.在看书过程中,最让我眼前一亮的就是这一点了:当要insert的元素个数大于要insert的position位置之后的现有元素个数时,vector是这么 做的:假设要insert的元素个数为5,position位置之后现有的元素个数为2,那么vector的现有元素最后就是位置就是position+2;vector会把要插入的最后5-2=3个元素添加到position+2之后,再将positioin之后的两个元素移动到position+5(即最后)之后,最后将要插入的前2个元素放在position+1,position+2两个位置;这样的好处是最大程度上避免了拷贝的消耗。

抱歉!评论已关闭.