当前位置: 首页 > 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

相关文章:

  • 西门子触摸屏文本显示不全,传送字体文件到屏幕的具体操作方法
  • C++ 日志系统实战第三步:熟悉掌握各种设计模式
  • 信令与流程分析
  • 界面控件DevExpress WinForms v25.1 - 数据处理功能持续增强
  • freecad参数化三维模型装配体解析至web端,切换参数组或修改参数
  • Parasoft C++Test软件单元测试_对函数打桩的详细介绍
  • Java对接企业微信实战笔记
  • SQL注入高级绕过手法汇总 重点
  • 在java程序中,类,进程,线程他们之间的关系以及main方法与他们之间的关系
  • 找出字符串中第一个匹配项的下标
  • Xmind快捷键大全
  • 区块链驱动的供应链金融创新:模型构建与商业化路径研究
  • 身份与访问管理(IAM):零信任架构下的认证授权技术与实战
  • cgroup sched_cfs_bandwidth_slice参数的作用及效果
  • CUDA编程之Grid、Block、Thread线程模型
  • uni-app云开发总结
  • 分布式队列对消息语义的处理
  • 飞机会员日
  • 【金仓数据库征文】金仓数据库KingbaseES:在技术与人文交织中开拓信创未来
  • 面试常问问题:Java基础篇
  • 伊朗阿巴斯港港口爆炸已致47人受伤
  • 识味顺德︱顺德菜的醉系列与火滋味
  • 常熟银行一季度净赚超10亿增逾13%,净息差较上年末下降0.1个百分点
  • 巴印在克什米尔发生交火
  • 云南舞蹈大家跳暨2025年牟定“三月会”昨天开幕
  • 全国首例!上市公司董监高未履行公开增持承诺,投资者起诉获赔