当前位置: 首页 > news >正文

C++STL-vector

一.基本概念

1.front()就是容器里第一个元素,back()就是容器最后一个元素,begin()就是指向第一个元素,end()就是指向最后一个元素的后一个元素

2. vector对象创建

1.默认构造函数vector<int> v1;
2.初始化列表vector<int> v2_1 = { 9,8,7,6,5 };
vector<int> v2_2({ 9,6,6,8,5 });
3.迭代器vector<int> v3(v2_1.begin(), v2_1.end());
4.全0初始化,初始化8个0vector<int> v4(8);
5. vector<int> 变量名(a, b); 申请a个空间的元素,每个元素的值初始化为 b vector<int> v5(8, 6);//初始化8个6
 6. 拷贝构造函数vector<int> v6(v2_2);

3.vector赋值操作

vector<int> v = { 9,8,5,2,1,1 };
1. = 赋值vector<int> v1 = v;
2. assign(迭代器)vector<int> v2;
v2.assign(v1.begin(), v1.end());
 3. assign初始化列表 vector<int> v3;
v3.assign({ 1,2,3,4,5,6 });
4. assign初始化 a 个 bvector<int> v4;
v4.assign(8, 6);//初始化8个6

4.vector数据插入

vector<int> v;
1.push_back,在容器后面插入操作v.push_back(10);
2.insert,在容器中间任意位置插入v.insert(v.begin(), 888);//在最前面插入

5.vector数据删除

vector<int> v = { 9,8,5,211 };
1、pop_back,尾删v.pop_back();
2、erase,中间任意位置删 v.erase(v.begin());
3、clear,全部删除v.clear();

6.vector扩容

vector<int> v1 = { 9,8,7,6 }
1.size(),获取数据个数v1.size()
2.capacity(),获取容量大小,如果capacity小于size时,会按1.5倍扩容v1.capacity()
3.resize(),改变vector的size;如果扩容很大,然后缩小后,capacity不会变,还是原来很大的容量v1.resize(18);//将元素个数变成18个,如果多余出的则全部变成0,少于则缩容
v1.resize(20, 6);//扩容成20个元素,如果多余出的则全部变成6
4.reserve(),改变vector的capacityv.reserve(100);//直接将capacity扩容到100

6.vector随机访问元素

区别:at函数会产生异常处理,[ ]不会产生异常处理vector<int> v = { 9,8,7,6,5 };
1.像数组访问一样“[ ]”访问元素v[2]
2.用at函数访问v.at(2)

7.vector内存交换

swap()vector<int> v1 = { 1,2,3,4,5 };
vector<int> v2 = { 9,8,7,6,5 };
1. 内存交换v1.swap(v2);//v1和v2值交换
2.缩容,如果resize很大后,再resize小,但capacity还是很大,通过swap函数后,capacity变得很小了.

v1.resize(1000000);
v1.resize(5);

vector<int>(v1).swap(v1);

3.内存清理,即使clear掉元素,但capacity还是很大,通过swap一个空数后,capacity就会被清理

v2.resize(1000000);
v2.clear();

vector<int>({}).swap(v2);

8.vector高效删除

//这种方法是我们常用删除方法,但当我们元素很大时候,时间复杂度会很高,所有耗时也比较长
void remove1(vector<int>& v, int index) {v.erase(v.begin() + index);
}//这种高效删除,直接交换一下,然后删除,时间复杂度很小
void remove2(vector<int>& v, int index) {swap(v[index], v.back());v.pop_back();
}

9.vector数据排序

vector<int> v = { 9,8,7,1,2,3,4 };
1.sort(),从小到大排序sort(v.begin(), v.end());
如果想逆序排,可以添加这样一个函数,当A>B时返回true,所以逆序排bool cmp(int a, int b) {
return a > b;
}
sort(v.begin(), v.end(), cmp);

http://www.lryc.cn/news/582612.html

相关文章:

  • 股票数据源对接技术指南:印度尼西亚、印度、韩国
  • 静态路由实验以及核心原理
  • ubuntu24.04安装NFS网络文件系统/ARM开发板NFS挂载
  • 香港风水(原生)林地的逻辑分类器
  • 香港站群服务器价格怎么样?
  • Android UI 组件系列(四):EditText 使用详解与输入限制
  • LabVIEW-GPRS 远程土壤监测
  • Unity开发如何解决iOS闪退问题
  • kotlin中的冷流和热流
  • 5 种备份和恢复安卓短信的方法
  • 理解STM32F103的中断优先级分组
  • C#,js如何对网页超文本内容按行拆分,选择第A-B个字符返回HTM?
  • day55 序列预测任务介绍
  • React Native安卓刘海屏适配终极方案:仅需修改 AndroidManifest.xml!
  • 鸿蒙分布式开发实战指南:让设备协同像操作本地一样简单
  • Jmeter的JDBC数据库连接
  • 基于springboot的非遗传承宣传平台
  • 【Mac开发】Mac 应用 Archive 成功后无法打开?
  • 苹果App上架流程:不用Mac也可以上架的方法
  • WPF之命令
  • 【论文阅读】Improving the Diffusability of Autoencoders
  • gloo 多卡训练
  • curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
  • 开发中如何自定义线程池
  • [1-01-01].第50节:泛型 - 泛型的使用
  • 深入了解linux系统—— System V之消息队列和信号量
  • 自动驾驶的“安全基石”:NVIDIA如何用技术守护未来出行
  • 冷链物流配送中心选址与路径优化模型研究
  • 跨越十年的C++演进:C++23新特性全解析
  • 3423. 循环数组中相邻元素的最大差值 — day97