【C++】vector和list的区别

ops/2024/9/23 19:26:21/

1. vector

  • vector和数据类似,拥有一段连续的内存空间,并且起始地址不变
  • vector能高效的进行随机存取,时间复杂度为o(1)
  • 因为vector内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)
  • 当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝

list_5">2. list

  • list是由双向链表实现的,因此内存空间不是连续的
  • 只能通过指针访问数据,所以list的随机存取效率非常低,时间复杂度为o(n)
  • 但是由于链表的特点,插入和删除比较高效

list_9">3. vector和list的区别

  • vector拥有一段连续的内存空间,能很好的支持随机存取
  • list的内存空间是不连续的,不支持随机访问

4. 代码

#include<iostream>
#include<vector>
#include<list>
using namespace std;int main()
{vector<int> v;list<int> l;//往v和l中分别添加元素for(int i=0; i<8; i++) {v.push_back(i);l.push_back(i);}cout << "v[2]=" << v[2] << endl;//cout << "l[2]=" << l[2] << endl;  //编译错误,list没有重载`[]`cout << (v.begin()<v.end()) << endl; //cout << (l.begin() < l.end()) << endl; /编译错误,list::iterator没有重载 `<` 和 `>`cout << *(v.begin()+1) << endl;//cout << *(l.begin()+1) << endl; //编译错误,list::iterator没有重载`+`vector<int>::iterator itv = v.begin();list<int>::iterator itl = l.begin();itv = itv + 2;//itl = itl + 2; //编译错误,list::iterator没有重载+itv++; itl++;	//list::iterator中重载了++,只能使用++进行迭代访问。cout << *itv << endl;cout << *itl << endl;getchar();return 0;
}

5. 总结

  • 如果需要高效的存取,不在乎插入和删除的效率,使用vector
  • 如果需要大量的插入和删除,不需要随机存取,则使用list

http://www.ppmy.cn/ops/110572.html

相关文章

测试开发基础——软件测试中的bug

二、软件测试中的Bug 1. 软件测试的生命周期 软件测试贯穿于软件的整个生命周期 需求分析 测试计划 测试设计与开发 测试执行 测试评估 上线 运行维护 用户角度&#xff1a;软件需求是否合理 技术角度&#xff1a;技术上是否可行&#xff0c;是否还有优化空间 测试角度…

JAVA-网络(0907)

一.计划 1.1 网络编程 1.2 多线程 1.3 swing&#xff08;B/S&#xff0c;C/S&#xff09; 1.4 数据库 1.5 前端 1.6 JavaEE 二.回顾 2.1 IO流 2.1.1 输入流/输出流 2.1.2 常用类 InputStrream 字节 / OutputStream Reader 字符 / Writer 2.2 异常 三.网络编程 3…

16 | 理论二:如何做到“对扩展开放、修改关闭”?扩展和修改各指什么?

在上篇文章中&#xff0c;我们学习了单一职责原则。今天&#xff0c;我们来学习 SOLID 中的第二个原则&#xff1a;开闭原则。我个人觉得&#xff0c;开闭原则是 SOLID 中最难理解、最难掌握&#xff0c;同时也是最有用的一条原则。 之所以说这条原则难理解&#xff0c;那是因…

物联网架构

1 三层架构 三层架构就像我们拿着一个设备&#xff0c;通过网络直接连接到服务器获取结果&#xff0c;步骤简单。 举个例子&#xff1a;智能家居的温度监控系统 1. 感知层&#xff08;设备与传感器&#xff09; 在智能家居系统中&#xff0c;温度传感器被安装在家里的各个房间…

【zsh】Linux离线安装zsh

首先从GitHub下载源码&#xff0c;然后编译源码后安装。以下是具体的步骤&#xff1a; 1. 下载并解压源码 首先&#xff0c;从GitHub下载了zsh源码的压缩包并解压到某个目录&#xff1a; tar -xvf zsh-<version>.tar.gz cd zsh-<version>2. 安装编译所需的依赖&…

修改centos7系统语言en_US.UTF-8为中文zh_CN.UTF-8

修改centos7系统语言 查看系当前语言包 locale 查看系统拥有语言包 locale -a &#xff08;zh_CN.UTF-8是简体中文&#xff0c;如果没有zh_CN.UTF-8,就安装语言包&#xff0c;如果存在可以直接设置) 安装简体中文语言包 yum install kde-l10n-Chinese 设置为中文 临时修…

智慧农业——InsectMamba利用状态空间模型对害虫进行分类

介绍 论文地址&#xff1a;https://arxiv.org/abs/2404.03611 害虫分类是农业中的一个重要问题。准确识别有害害虫可减少对作物的损害&#xff0c;确保粮食安全和环境的可持续发展。然而&#xff0c;害虫及其自然环境的高度拟态性和物种多样性使得视觉特征的提取极具挑战性。…

【Vue嵌套数据中,实现动态表头和内容】

el-table中&#xff0c;表头和内容是动态的。表头名称取数组对象tableData中的crb.name、dcpg.name等等。表头为空&#xff0c;不显示这一列。内容取的是数组对象tableData中的crb.count、dcpg.count等等。tableData [ { crb: { name:‘矫正状态: 在矫(数里)’, count: 1, }, …