发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
常见的STL有:vector、list、stack、queue、deque、map、set 接下来我将依此介绍这些STL以及其常见的用法。 序列式容器: vector是一个动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。 vector所采用的数据结构非常简单:线性连续空间。它以两个迭代器start和finish分别指向配置得来的连续空间中目前已被使用的范围,并以迭代器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源码剖析》
来自: KookNut39 > 《待分类》
0条评论
发表
请遵守用户 评论公约
vector
cout <<"容器 大小为: "<<iVec.size() <<endl;cout <<"容器 容量为: "<<iVec.capacity() <<endl; //1个元素, 容器容量为1.cout <<&qu...
【精华】vector用法精讲
Vector模板类的使用
vetcor顾名思义就是一个向量的容器,该容器中的每个元素都属于同一个类型,有点类似于数组,vetor容器与数组的不同之处就在于,它具有“动态”的属性,举例来说,如果定义了一个vector容量为10,当你添...
剑指offer之调整数组顺序使奇数位于偶数前面
我们利用partition算法博客可以知道,这里还是利用两个指针,一个指针指向开始,一个指针指向尾巴,分别从两边进行扫描,我们先从尾巴指针向左移动,发现了奇数就暂停这里,然后开始移动首指针,如果发...
C 看图学码:std::vector
vector内存布局#include <iostream>#include <vector> int main(){ std::vector<int> v {2,4,5}; v.push_back(6); v....
Vector<vector<int>> array用法(转载)
vector的reserve和resize
vector的reserve和resize vector 的reserve增加了vector的capacity,但是它的size没有改变!vector<int> vect;vect.push_back(1);cout<<vect.size()<<endl;//分配100个空间 vect....
vector 详细用法 C++-CSDN博客
swap(vec1)//swap(vec,vec1)//cout<<"vector<int>(vec)-swap-capacity:"<<vec.cout<<"vector&l...
c++ vector用法(1)
c++ vector用法(1)vector< vector <int>> Arry(10, vector<int>(0));1)定义一个10个vector元素,并对每个vector符值1-10。之所以用到vector<int>(0)是对vector初始化,否...
微信扫码,在手机上查看选中内容