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

C++中的vector和list的区别与适用场景

区别

特性vectorlist
底层实现动态数组双向链表
内存分配连续内存块非连续内存块
随机访问支持,通过索引访问,时间复杂度O(1)不支持,需遍历,时间复杂度O(n)
插入/删除末尾操作效率高,时间复杂度O(1)任意位置操作效率高,时间复杂度O(1)
内存开销较低较高,需要额外存储指针
迭代器稳定性插入/删除迭代器会失效插入/删除迭代器不会失效

使用场景

使用vector的场景

1.需要频繁随机访问元素。
2.数据量较大且内存连续性有助于性能优化。
3.插入和删除操作主要集中在容器末尾。

使用list的场景

1.需要频繁在中间插入或者删除元素。
2.数据量较小,内存开销不是主要考虑因素。
3.不需要随机访问,仅需顺序遍历。

示例代码

vector的常用方法

  1. 初始化
std::vector<int> vec ={1,2,3};
std::vector<int> vec2(10,0);//初始化大小为10,所有元素为0

2.添加元素

vec.push_back(4);//在尾部添加元素
vec.insert(vec.begin()+1,10);//在指定位置插入一个或多个元素。
vec.emplace_back(5);//在末尾直接构造元素,避免不必要的拷贝
vec.emplace(vec.begin() + 1, 5, 6); // 指定位置直接构造元素,在索引 1 的位置直接构造 pair(5, 6)
vec.assign(3,7);//替换整个 vector 的内容,vec变为 {7,7,7}

3.删除元素

vec.pop_back();//删除尾部元素
vec.erase(vec.begin()+1);//删除指定位置的元素

4.访问元素

int vel=vec[0];//随机访问
int val2=vec.at(1);//带边界的访问

5.遍历

for(int val:vec){std::cout << val << " ";
}

6.修改大小

vec.resize(5)//调整大小为5

7.清空

vec.clear();

list的用法

1.初始化

std::list<int> lst={1,2,3};
std::list<int> lst2(10,0);//初始化大小为10,所有元素为0

2.添加元素

lst.push_back(4);//在尾部添加元素
lst.push_front(0);//在开头添加元素
auto it = lst.begin();
std::advance(it,1);
lst.insert(it,5);//在指定位置插入元素

3.删除元素

lst.pop_back();
lst.pop_front();//删除开头元素
lst.erase(lst.begin());//删除指定位置的元素

4.访问元素

for(int val:lst){std::cout << val << " ";
}
  1. 修改大小
lst.resize(5);//调整大小为5
  1. 清空
lst.clear();

7.排序

lst.sort();//对列表进行排序
  1. 合并
std::list<int> lst2 = {4,5,6};
lst.merge(lst2);

9.反转

lst.reverse();//反转列表

通过以上总结,可以根据具体需求选择使用vectorlist

http://www.xdnf.cn/news/146629.html

相关文章:

  • LLM Graph Rag(基于LLM的事件图谱RAG)
  • 一种用于加密代理流量检测的轻量级深度学习方法
  • jdk-8u202-linux-x64.tar.gz官方下载地址
  • mysql基础——数据表查询(全面解析)
  • 技术书籍推荐(003)
  • A2A与MCP之间的简单理解
  • 【Echarts】使用echarts绘制多个不同类型的中国地图
  • Redis 集群切片全解析:四种常见技术的原理、优劣与应用
  • Github 2025-04-25 Java开源项目日报 Top8
  • Java实现HTML转PDF(deepSeekAi->html->pdf)
  • 通过模仿学习实现机器人灵巧操作:综述(下)
  • Azure Data Factory ETL设计与调度最佳实践
  • Android ActivityManagerService(AMS)深度解析
  • PostgreSQL使用LIKE右模糊没有走索引分析验证
  • 【高频考点精讲】ES6 String的新增方法,处理字符串更方便了
  • CentOS系统防火墙服务介绍
  • 【大模型理解消化的搅碎机】基于6000种商品CSV表格的知识图谱构建
  • 计组1.2.4——计算机系统的层次结构
  • Allegro23.1新功能之OrcadX平台使用操作指导
  • (三) Trae 调试C++ 基本概念
  • 【虚拟机安装Ubuntu 24 LTS】 MobaXterm 连接Access denied错误-安装进度卡“正在传输文件”-固定内网ip
  • 反爬虫机制中的验证码识别:类型、技术难点与应对策略
  • 艾德文·卡特姆:将画布变成屏幕,开启CGI时代
  • ‌CDGP|企业数据安全治理:制定落地战略,护航数字经济高质量发展
  • 求职意向商务/BD简历模板
  • DPIN河内AI+DePIN峰会:共绘蓝图,加速构建去中心化AI基础设施新生态
  • 算法中的数学:gcd与lcm
  • 诗词大会竞赛主持稿串词(二)
  • CKESC SKY 6S 50A_4S 60A 电调专业测评
  • 常见网络安全攻击类型深度剖析(一):恶意软件攻击——病毒、蠕虫、木马的原理与防范