顺序容器是拥有单一类型元素组成的一个有序集合。主要的顺序容器有vector和list。其实还有deque(双端队列)

1.vector数据结构

使用头文件:#include <vector>

vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。

因此能高效的进行随机存取,时间复杂度为o(1);

但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。

另外,当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝。

使用vector需要注意以下几点:

①如果你要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;

②Vector作为函数的参数或者返回值时,需要注意它的写法:

double Distance(vector<int>&a, vector<int>&b) 其中的“&”绝对不能少!!!

2.list数据结构

使用头文件:#include <list>

list是由双向链表实现的,因此内存空间是不连续的。

只能通过指针访问数据,所以list的随机存取非常没有效率,时间复杂度为o(n);

但由于链表的特点,能高效地进行插入和删除。

总之,如果需要高效的随机存取,而不在乎插入和删除的效率,使用vector;

如果需要大量的插入和删除,而不关心随机存取,则应使用list。

3.vector基本操作

(1)头文件:#include<vector>

(2)建立一个vector:vector<int> vec;

(3)在尾部插入元素:

vec.push_back(1);

vec.push_back(2);  //把1和2压入vector,这样vec[0]就是1,vec[1]就是2

(4)插入元素:vec.insert(vec.begin()+i,a);  //在第i+1个元素前面插入a;

(5)删除元素:

vec.erase(vec.begin()+2);  //删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j);  //删除区间[i,j-1];区间从0开始

(6)向量大小:vec.size();

(7)清空:vec.clear();

(8)使用迭代器访问元素:

vector<int>::iterator it;

for(it=vec.begin();it!=vec.end();it++)

cout<<*it<<endl;

(9)定义一个二维数组:

vector<vector<Point2f> > points;

points[0].size();  //指第一行的列数

4.vector如何自己增长?

容器的容量和长度:只有连续存储的容器才有容量的概念,例如vector,deque或string。list不要求容量。

为了提高效率 实际上 vector 并不是随每一个元素的插入而增长自己 而是当 vector 需要增长自身时 它实际分配的空间比当前所需的空间要多一些 也就是说 它分配了一些额外的内存容量 或者说它预留了这些存储区。

可以调用capacity()来查看当前容器的容量,调用size()来查看当前容器拥有元素的个数。

#include <vector>
#include <iostream>
using namespace std;
int main()
{vector< int > ivec;cout << "ivec: size: " << ivec.size()<< " capacity: " << ivec.capacity() << endl;for ( int ix = 0; ix < 24; ++ix ){ivec.push_back( ix );cout << "ivec: size: " << ivec.size()<< " capacity: " << ivec.capacity() << endl;}return 0;
}

可以看到,在ivec定义之后,长度和容量都是0。但是在插入元素之后,它的容量随每次重分配而加倍。

【C/C++】顺序容器list和vector相关推荐

  1. C++primer第九章 顺序容器 9.4 vector对象是如何增长的

    为了支持快速随机访问,vector将元素连续存储,每个元素紧挨着前一个元素存储.通常情况下,我们不必关心一个标准库类型是如何实现的,而只需关心它如何使用.然而,对于vector和string,其部分实 ...

  2. C++ Primer 第九章 顺序容器

    由于书籍上写的已经很经典了,故大部分用图片的形式来阐述概念,代码纯手打进行验证. 1.顺序容器类型:vector.deque.list.forword_list.array.string. 2.顺序容 ...

  3. C++ Primer 第9章 顺序容器 第一次学习笔记

    1. 顺序容器概述 #include <vector> //可变大小数组.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢 #include <deque> //双端队 ...

  4. 【小白学习C++ 教程】二十一、C++ 中的STL容器Arrays和vector

    @Author:Runsen C++的标准模板库(STL)是提供数组.向量.队列等数据结构的模板类的集合.STL是由容器.算法.迭代器组成的库. 容器 容器存储对象和数据.它们基本上是基于模板的泛型类 ...

  5. C++拾遗(四)——顺序容器

    之前一篇博文(<初窥标准库>)简单了解了一种最常用的顺序容器:vector类型.本文将对该文内容进行进一步的学习和完善,继续讨论标准库提供的顺序容器类型.所谓顺序容器,即将单一类型的元素聚 ...

  6. 《C++Primer》第九章-顺序容器-学习笔记(1)-顺序容器定义与操作

    <C++Primer>第九章-顺序容器-学习笔记(1) 文章目录 <C++Primer>第九章-顺序容器-学习笔记(1) 摘要 顺序容器的定义 容器元素的初始化 将一个容器初始 ...

  7. c++语法9 顺序容器

    文章目录 顺序容器的类型 顺序容器适配器 1 顺序容器的定义 1.1容器元素的初始化 1.2容器内元素的类型约束 2 迭代器 3 顺序容器的操作 3.1 容器定义的类型别名 3.2 begin和end ...

  8. C++ Primer(顺序容器 上)

    第九章 顺序容器 标准库定义了三种顺序容器类型:vector.list 和 deque. 标准库还提供了三种容器适配器(adaptors): stack, queue, priority_queue ...

  9. C++知识点17——使用C++标准库(顺序容器vector常用操作)

    C++STL中的容器类型分为两种,一种是顺序容器,另一种是关联容器,这两种容器之所以被划分,本质区别是顺序容器可以通过元素在容器中的位置进行访问及存储,而关联容器只能通过键来访问和存储元素 顺序容器常 ...

最新文章

  1. ES6中的class是如何实现的?(附Babel编译的ES5代码详解)
  2. 每日一皮:当你要下班的时候,突然测试叫住了你...
  3. WebSphere MQ 自动启动发送方通道
  4. fft 相位谱_FFT和示波器实用指南——深圳零式未来仪器科技
  5. SAP License:杂谈-珍爱生命,远离SAP
  6. 你值得拥有的 11 个前端开发利器
  7. iOS企业证书申请介绍
  8. C语言实现大数计算器
  9. 计算机网络原理思维导图
  10. vcs+verdi/Debussy
  11. 微信小程序学习第8天——自定义组件的数据监听器Observer小案例
  12. 学java开发需要什么配置的电脑?
  13. 什么是WMS系统,有什么功能?
  14. python dataframe根据多列排名并生成序号_将rank字段添加到pandas dataframe,按唯一组和多列排序...
  15. 算法设计之动态规划法
  16. 手把手教你美国亚马逊直购
  17. 使用Lambda(拉姆达)对集合进行排序,一行代码即可解决
  18. 7种方法实现数组去重
  19. 使用OpenMP reduction子句求解二维数组的最小值和输出所在下标
  20. JDBC getParameterType call failed - using fallback method instead

热门文章

  1. EmbeddedBrowser
  2. Linux/Unix服务端和客户端Socket编程入门实例(含源码下载)
  3. 程序员不是神,心态决定一切
  4. C#写一个URL编码转换GB23121的方法,然后可以取到天气预报
  5. iptables原理知识
  6. 宜信PaaS平台基于Calico的容器
  7. Mysql like ' ' 会不会用到索引
  8. oracle 时间戳生成语句(秒级+毫秒级)
  9. 在Linux上安装ant环境
  10. ZJOI2019 线段树