vector基本概念
功能:
- vector数据结构和数组非常相似,也称为单端数组。
vector和普通数组区别:
- 不同之处在于数组是静态空间,而vector空间是动态分配的,基本步揍为:建立空间->填充数据->重建更大空间->复制原空间数据->删除原空间->添加新数据,如此反复,保证vector始终是一块独立的连续内存空间。
(1)构造函数
1 vector<T>();//默认构造函数 2 3 vector<T>(v.begin(),v.end());//将v[begin(),end()]中的元素拷贝给自身 4 5 vector<T>(n,elem);//构造函数将n个元素elem拷贝给自身 6 7 vector<T>(v);//拷贝构造
(2)赋值操作
利用=或assign函数进行赋值
1 vector<int> v; 2 for (int i = 0; i < 10; i++) { 3 v.push_back(i);//尾插插入元素 4 } 5 vector<int> v1 = v;//利用=赋值 6 vector<int> v2; 7 v2.assign(v1.begin(),v1.end());//利用assign函数赋值,传入一个区间 8 vector<int> v3; 9 v3.assign(5, 100);//利用assign函数赋值,传入n个elem,assign(n,elem);
(3)容量与大小
1 vector<int> v; 2 v.empty();//判空函数,返回一个布尔值 3 v.capacity();//容量函数,返回vector容器中现有开辟空间 4 v.size();//大小函数,返回vector容器中元素的个数 5 v.reserve(20000);//直接指定vector容器的容量,可以减少vector动态分配内存的次数,从而提高效率 6 v.resize(3);//重新指定容器的元素个数,若容器变长则以默认值0填充,若变短,超出元素则被删除 7 v.resize(10,100);//重新指定容器的元素个数,若容器变长则以默认值100填充,若变短,超出元素则被删除
(4)插入与删除
1 vector<int> v; 2 v.assign(3, 100);//赋值10个元素 3 //100 100 100 4 5 v.push_back(10);//尾插法插入元素 6 //100 100 100 10 7 8 v.pop_back();//删除最后一个元素 9 //100 100 100 10 11 v.insert(v.begin() + 1, 5);//在迭代器指向位置插入元素 12 //100 5 100 100 13 14 v.insert(v.begin() + 1, 3,6);//在迭代器指向位置插入n个elem 15 //100 6 6 6 5 100 100 16 17 v.erase(v.begin());//删除迭代器指向位置的元素 18 v.erase(v.begin() + 1, v.end());//删除迭代器区间内的元素,区间左闭右开 19 v.clear();//清空
(5)数据存取
利用at()函数或[]下标的形式来访问数据。其中front()函数和back()函数分别返回容器的第一个元素和最后一个元素
deque容器
功能:
- 双端数组,可以对头部进行插入删除。
deque和vector的区别:
- vector对于头部的插入删除效率较低,数据量越大,效率越低。
- deque相对而言对于头部的插入删除就很方便。
- vector访问元素时的速度要高于deque,这和俩者内部实现有关。
- deque没有容量这一说。
deque内部工作原理:
从deque内部有个中控器,维护每段缓冲区中的内存,缓冲区中存放真实数据。中控器维护的时每个缓冲区的地址,使得使用时像一片连续的空间。原理个人认为像计算机组成原理中的分页。内部结构简图如下:
deque操作:
基本和vector一致,此处就不再叙述。
原文链接: https://www.cnblogs.com/jhw9/p/13190004.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/358375
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!