当前位置: 首页 > 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.dtcms.com/a/270258.html

相关文章:

  • 【c++学习记录】状态模式,实现一个登陆功能
  • 笔试——Day1
  • numpy数据分析知识总结
  • VMware Workstation不可恢复错误:(vmx)点击设置闪退解决
  • [2-02-02].第03节:环境搭建 - Win10搭建ES集群环境
  • 一天一道Sql题(day03)
  • Choreographer
  • 基于大模型的心肌炎全病程风险预测与诊疗方案研究
  • 使用git生成ssh的ed25519密钥
  • 鲁成伟业精彩亮相第六届中国国际无人机及无人系统博览会
  • 一个vue项目的基本构成
  • DCL学习
  • 操作系统:基本概念
  • Java结构型模式---适配器模式
  • 蓝桥杯 第十六届(2025)真题思路复盘解析
  • 【Bluedroid】BLE 地址解析列表的初始化与清除机制(btm_ble_resolving_list_init)
  • 分布式接口幂等性的演进和最佳实践,含springBoot 实现(Java版本)
  • uniapp支持单选和多选的 Vue2 版本组件
  • 从UI设计到数字孪生实战演练:构建智慧金融的智能投顾平台
  • 第十四节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - Flask 后端 生产部署讲解
  • Python之面向对象和类
  • NFT,Non-Fungible Token,非同质化代币
  • openEuler2203sp4-vg磁盘组中剔除磁盘
  • 浅谈——数据采集爬虫
  • 实战:Android 15 (API 35) 适配 构建踩坑全记录
  • 板凳-------Mysql cookbook学习 (十一--------5)
  • 《每日AI-人工智能-编程日报》--2025年7月8日
  • Softhub软件下载站实战开发(十六):仪表盘前端设计与实现
  • 香港风水(原生)林地的逻辑分类器
  • 缺乏项目进度预警机制,如何建立预警体系