顺序容器
1. 概述
顺序容器:提供控制元素存储和访问顺序的能力。这种顺序与元素的值无关,只与元素加入容器的顺序相关。按照元素在容器中的位置来顺序保存和访问。
容器名称 |
容器特性 |
vector |
可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢 |
array |
固定大小数组。支持快速随机访问。不能添加或者删除元素 |
string |
专门用于保存字符的可变大小数组。支持快速随机访问。在尾部插入删除速度很快 |
deque |
双端队列。支持快速随机访问。在头或者尾部插入或者删除速度很快 |
list |
双向链表。支持双向顺序访问。任何位置进行插入删除速度都很快 |
froward_list |
单向链表。支持单向顺序访问。任何位置进行插入删除速度都很快 |
2. 容器操作
2.1 添加元素
c.push_back(t)
:在c
容器的尾部添加一个值为t
的元素,返回void
。forward_list、array
不支持此操作
c.push_front(t)
:在c
容器的头部创建一个值为t
的元素,返回void
。array、vector、string
不支持此操作
c.emplace_back(args)
:在c
容器的尾部添加一个由args
创建的元素,返回void
。forward_list、array
不支持此操作
c.emplace_front(args)
:在c
容器的头部添加一个由args
创建的元素,返回void
。array、vector、string
不支持此操作
insert
:
c.insert(p,t)
:在迭代器p
指向的元素之前插入一个值为t
的元素,返回新元素的迭代器。
c.insert(p,n,t)
:在迭代器p
指向的元素之前插入n
个值为t
的元素,返回新添加的第一个元素的迭代器,n
为0则返回p
。
c.insert(p,b,e)
:将迭代器p
和e
指定范围内的元素插入到迭代器p
指向的元素之前,返回新添加的第一个元素的迭代器,范围为空返回p
。
c.insert(p,il)
:il
为花括号包围的元素值列表,将这些值插入到迭代器p
指向的元素之前。返回新添加的第一个元素的迭代器,列表为空返回p
forward_list
有自己特有的insert
。array
不支持此操作
c.emplace(p,args)
:在迭代器p
指向的元素之前插入由args
创建的元素,返回新元素的迭代器。forward_list
有自己特有的emplace
。array
不支持此操作
- 注意:向
vector、string、deque
插入元素会使原有的迭代器、引用和指针失效
2.2 访问元素
基本操作
操作 |
说明 |
c.back() |
返回c 中尾元素(不是尾后)的引用。c 为空,函数行为未定义 |
c.front() |
返回c 中首元素的引用。c 为空,函数行为未定义 |
c[n] |
返回c 中下标为n 的元素的引用,n 为无符号整数。n 越界,函数行为未定义 |
c.at(n) |
返回c 中下标为n 的元素的引用。n 越界,抛出out_of_range 异常 |
注意事项
2.3 删除元素
基本操作
操作 |
说明 |
c.pop_back() |
删除c 中尾元素,返回void 。c 为空,函数行为未定义。 |
c.pop_front() |
删除c 中首元素,返回void 。c 为空,函数行为未定义。 |
2.4 其他操作
sort
函数排序
- 包含在
algorithm
头文件中
void sort(RandomAccessIterator first,RandomAccessIterator last,Compare comp);
first
:要排序数组的起始迭代器或地址
last
:结束数据的后一个迭代器或地址
comp
:排序算法,默认从小到大排序。bool comp(a,b)