打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
vector以及使用举例--C++基础

常见的STL有:vector、list、stack、queue、deque、map、set
接下来我将依此介绍这些STL以及其常见的用法。
序列式容器:
vector是一个动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。
vector所采用的数据结构非常简单:线性连续空间。它以两个迭代器startfinish分别指向配置得来的连续空间中目前已被使用的范围,并以迭代器end_of_storage指向整块连续空间的尾端。一旦容量等于大小,便是满载,下次再有新增元素,vector的整个数组就得另觅他处。
动态扩容:当插入新元素发现当前容量不够时,扩容机制又是如何的?接下来我们通过代码来分析一下。

#include"Test.h"
#include<vector>
#include<list>
#include<array>
#include<algorithm>//为了使用find、sort等方法

void main()
{
setlocale(LC_ALL, "chs");//识别中文
//vector举例
vector<int> v1(3, 8);
cout << "当前数组大小:" << v1.size() << endl;
cout << "当前数组容量:" << v1.capacity() << endl;
v1.push_back(1);
cout << "当前数组大小:" << v1.size() << endl;
cout << "当前数组容量:" << v1.capacity() << endl;
v1.push_back(2);
cout << "当前数组大小:" << v1.size() << endl;
cout << "当前数组容量:" << v1.capacity() << endl;
v1.push_back(3);
cout << "当前数组大小:" << v1.size() << endl;
cout << "当前数组容量:" << v1.capacity() << endl;
v1.push_back(4);
cout << "当前数组大小:" << v1.size() << endl;
cout << "当前数组容量:" << v1.capacity() << endl;
v1.push_back(5);
cout << "当前数组大小:" << v1.size() << endl;
cout << "当前数组容量:" << v1.capacity() << endl;
for (vector<int>::iterator v2 = v1.begin();
v2 != v1.end(); v2++)
{
cout << *v2 << endl;
}
v1.pop_back();
v1.pop_back();
v1.pop_back();
v1.pop_back();
v1.pop_back();
cout << "当前数组大小:" << v1.size() << endl;
cout << "当前数组容量:" << v1.capacity() << endl;
v1.clear();
cout << "当前数组大小:" << v1.size() << endl;
cout << "当前数组容量:" << v1.capacity() << endl;
//用list实现增改删除

}








我从书本中看来的是动态扩容机制是以原本的2倍容量扩容,并且是另外开辟一块内存空间实现内存数据的拷贝,但是我在自己手写测试代码的扩容的过程中,感觉并不是以2倍的大小扩容,更像是以1.5倍的大小进行扩容,并且感觉v1的地址也没有进行改变。。。。后三张和前面几张图片的v1地址不同是因为,我截后几张图的时候,是重新调试了。
但是经过实验可以验证,当我们的最大容量和数组大小一样的时候,再进行插入,会进行扩容,并且通过pop_back或者clear方法,只会清除里面的数据,不会改变vector的容量大小,即它会动态扩容,但不会自动缩小。
erase使用注意,避免迭代器失效:

for (vector<int>::iterator v2 = v1.begin();
v2 != v1.end();)
{
if (*v2 == 1)
{
v2 = v1.erase(v2, v2 + 3);
}
else
{
v2++;
}
}

“No amount of money ever bought a second of time.”
参考资料:
《STL源码剖析》

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
vector
【精华】vector用法精讲
Vector模板类的使用
剑指offer之调整数组顺序使奇数位于偶数前面
C 看图学码:std::vector
Vector<vector<int>> array用法(转载)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服