C++ vector容器
2021/7/31 12:35:59
本文主要是介绍C++ vector容器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、vector容器的赋值
vectorv;
方式1:push_back
v.push_back(1);
方式2:通过拷贝构造函数
vectorv2;
v2=v1;
方式3:通过assign函数
vevtorv3;
v3.assign(v1.begin(),v1.end());
将v1的begin到end区间的元素赋值给v3。
二、vector容量和大小
函数原型:empty()判断容器是否为空;capacity()得到容器的容量;size()返回容器中元素的个数;resize(int num)函数,指定容器中的长度,如果num比现在的容器尺寸大的话,那么多余的空间将填充默认值,否则将删去末尾超出容器长度的元素。还可以在resize(int num,elem)添加elem参数,elem将替代默认值。
三、vector的插入和删除
1)尾部插入元素-push_back(elem)
2)删除最后一个元素-pop_back();有点像出栈。
3) 迭代器指定位置插入元素或者插入count个元素。v.insert(v.begin(),elem)或者v.insert(v.begin,count,elem);
4)删除迭代器指定位置的元素:v.erase(v.begin()); 或者可以删除一个区间元素。v.erase(v,begin(),v.end())
5) 删除容器中的全部元素。v.clear().
四、vector数据的获取
1)可以直接当数组来用,v[1]。
2)使用at。v.at(1);
3)v.front()获取容器第一个元素,v.back()获取最后一个元素。
五、交换
可以使用swap对两个vector进行交换,vector是动态的数组,因此调换后两个vector会根据元素的多少进行分配相应的空间。
void demo1(vector<int>& v) { for (vector<int>::iterator it=v.begin(); it!=v.end(); it++) { cout<<*it<<" "; } cout<<endl; } void demo2() { vector<int>v1; for (int i=0; i<5; i++) { v1.push_back(i); } demo1(v1); vector<int>v2; for (int i =10; i<43; i++) { v2.push_back(i); } demo1(v2); cout<<v1.capacity()<<endl; cout<<v1.size()<<endl; cout<<v2.capacity()<<endl; cout<<v2.size()<<endl; cout<<"分割线"<<endl; v1.swap(v2); demo1(v1); demo1(v2); cout<<v1.capacity()<<endl; cout<<v1.size()<<endl; cout<<v2.capacity()<<endl; cout<<v2.size()<<endl; }
结果:
0 1 2 3 4 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 8 5 64 33 分割线 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 0 1 2 3 4 64 33 8 5
可以看出v1的容量大小从8变成了64,v2则相反。并且通过测试,vector的容量大小只会是8
、16、32、64、128成倍的增长,不会出现单个字节的增加。比如此时的数组元素的个数为33,但是不会申请32+8=40或者32+16=48字节大小。申请的字节大小只会是成倍的增长。
这篇关于C++ vector容器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升