vector总结

1.vector的迭代器其实就是普通的指针,是Random Acess Iterators

2.vector占据的是线性连续空间。当空间不够时,也不是往原来的线性空间后面接着补,而是直接另找一块足够大小的线性连续空间,并把原来的旧的元素复制过去。

3.start指向目前使用空间的头,finish指向目前使用空间的尾,end_of_storage指向可用空间的尾。在finish和end_of_storage之间相当于备用空间。size()得到的是start到finish之间的长度,capacity()得到的是start到end_of_storage之间的长度

4.关于capacity()
(1)vector<int> iv(2, 9)得到的size和capacity相等,都是2。见p121下面vector的构造函数。
(2)如果备用空间不足以进行insert操作,那么会造成capacity的变化。如第2点所说,是另找一片线性空间。这片线性空间的大小是old_size + max(old_size, n),也就是旧长度的两倍或者旧长度+新增元素个数。
push_back和insert类似,但push_back调用的是insert_aux函数,当空间不够时,配置的空间大小就是原来的二倍(如果原来是空的,就配置为1)。
(3)reserve函数用来修改capacity()。当要求的新的空间大小比原来的小,那么它什么也不做;否则重新分配要求的新的空间大小。

5.insert在中间时,元素必须移动。似乎stl认为unitialized_copy比copy_backward的性能好,所以会根据不同情况,尽量优先使用unitialized_copy。见p126到p127。

6.vector的插入操作会引起迭代器失效。如果插入的元素数量没有超过capacity,那么只会造成插入位置之后的迭代器失效;如果插入元素数量超过capacity,所有元素都要搬家,这会导致所有迭代器失效。

7.vector的数据结构中有三个成员变量,是3中提到的start、finish、end_of_storage三个指针。所以vector的大小是24字节(64位系统的指针大小为8字节)。

vector<int> vi(3, 9);
cout << sizeof(vi) << endl;

输出的大小为24。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:在C++的标准模板库(STL)中,vector是一种动态数组容器。它提供了一组构造函数,用于创建不同类型和大小的vector对象。 引用:vector容器的使用方法是通过包含头文件<vector>来引入vector类。可以使用不同的构造函数来创建vector对象,如空的vector、指定大小的vector、使用其他vector来初始化的vector等。 引用:在vector容器中,可以使用[]运算符来获取元素,且vector和deque都支持这种操作。一般情况下,vector更适合在中间插入和删除元素,而deque更适合在首尾两端进行插入和删除元素操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C++ Vector总结](https://blog.csdn.net/weixin_43892514/article/details/104233686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [C++ vector用法详解](https://blog.csdn.net/zhanghaijun2013/article/details/105657663)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值