STL之vectr

STL之vectr本文详细解读了侯捷 STL 源码剖析 中关于 vector 内存排列 迭代器特性 size 与 capacity 区别 插入操作及内存优化等关键点

大家好,欢迎来到IT知识分享网。

这几天看了侯捷的《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两个位置;这样的好处是最大程度上避免了拷贝的消耗。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/142851.html

(0)
上一篇 2025-05-07 17:45
下一篇 2025-05-07 18:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信