vector容器 (20221115)
创始人
2024-01-21 06:50:57
0

一、vector容器

1、功能:与数组非常相似,也称为单端数组。

2、区别:数组是静态空间,vector可以动态扩展。

动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,将原数据拷贝到新空间,释放原空间。

3、vector迭代器是支持随机访问的迭代器

4、构造函数

5、vector的容量和大小

函数原型:

empty(); 判断元素是否为空

capacity(); 容器的容量

size(); 返回容器中元素个数

resize(int num);重新指定容器的长度num,若变长,则以默认值填充,若变短,则删除超出容器长度的元素

resize(int num,elem); 重新指定容器的长度num,若变长,则以elem填充,若变短,则删除超出容器长度的元素.

6、vector的插入和删除

push_back(ele); 尾部插入

pop_back();尾部删除

insert(const_iterator pos,ele); 迭代器指向位置pos插入元素ele

insert(const_iterator pos,int count,ele); 迭代器指向位置pos插入count个元素ele

erase(const_iterator pos); 删除迭代器指向元素

erase(const_iterator start, const_iterator end); 删除迭代器指向区间元素

clear();删除容器中全部元素

7、vector的数据存取

at(int idx); //返回容器中idx所指的数据

operator[]; //返回索引idx所指的数据

front(); //返回容器第一个数据元素

back();//返回最后一个元素

代码:

#includeusing namespace std;#includevoid printVector(vector&v){for (int i = 0; i < v.size(); i++){cout << v[i] << " ";}cout << endl;for (int i = 0; i < v.size(); i++){cout << v.at(i) << " ";}cout << endl;}void test01(){vectorv1;for (int i = 0; i < 10; i++){v1.push_back(i);}printVector(v1);//输出第一个元素cout << "第一个元素为:" << v1.front() << endl;cout << "最后一个元素为:" << v1.back() << endl;}

8、vector互换容器

实现两个容器的互换

函数原型:swap(vec);//将vec与本身的元素互换

代码:

void printVector(vector&v){for (int i = 0; i < v.size(); i++){cout << v[i] << " ";}cout << endl;for (int i = 0; i < v.size(); i++){cout << v.at(i) << " ";}cout << endl;}void test01(){vectorv1;for (int i = 0; i < 10; i++){v1.push_back(i);}cout << "交换前" << endl;printVector(v1);vectorv2;for (int i = 11; i < 20; i++){v2.push_back(i);}printVector(v2);cout << "交换后:" << endl;v1.swap(v2);printVector(v1);printVector(v2); }

效果:

实际作用:

巧用swap()可以收缩内存空间:void test02(){vectorv3;for (int i = 0; i < 100000; i++){v3.push_back(i);}cout << "v3的大小为:" << v3.size() << endl;cout << "v3的容量为:" << v3.capacity()<< endl;//重新指定大小v3.resize(3);cout << "v3的大小为:" << v3.size() << endl;cout << "v3的容量为:" << v3.capacity() << endl; //此时大小为3  容量为138255 浪费空间//用swap收缩内存vector(v3).swap(v3);//vector(v3)是以v3作为拷贝对象,拷贝构造一个匿名对象,//然后做一个容器之间的交换,交换后v3指向的是交换前匿名对象所指向的空间,容量为3,而匿名对象指向的是原本v3的空间,容量大小为138255//匿名对象的特点:使用完毕后 系统会自动回收其空间cout << "v3的大小为:" << v3.size() << endl;cout << "v3的容量为:" << v3.capacity() << endl;//此时大小为3  容量为3 浪费空间}

9、预留空间

功能:减少vector在动态扩展时的扩展次数

reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问。

//利用reserve预留空间void test02(){vectorv;int num=0;//统计开辟次数v.reserve(100000);int *p = NULL;for (int i = 0; i < 100000; i++){v.push_back(i);if (p != &v[0])//如果p不指向首地址,则使其指向首地址{p = &v[0];num++;}}cout << "次数:" << num << endl; //没有预留 num=30 预留后num=1}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...