摘要
序列容器一些操作
详情
序列容器
- array<T, N>(数组容器):一个长度固定的序列
- vector<T>(向量容器):一个长度可变的序列
- deque<T>(双向队列容器):一个长度可变的,可以自动增长的序列
- list<T>(链表容器):一个长度可变的,由T类型对象组成的序列
- forward_list<T>(正向链表容器):一个长度可变的,由T类型对象组成的序列
array, vector, deque容器的函数成员
函数成员 | 说明 | array<T, N> | vector<T> | deque<T> |
begin() | 返回开始迭代器 | Y | Y | Y |
end() | 返回结束迭代器 | Y | Y | Y |
rbegin() | 返回反向开始迭代器 | Y | Y | Y |
rend() | 返回方向结束迭代器 | Y | Y | Y |
cbegin() | 返回const开始迭代器 | Y | Y | Y |
cend() | 返回const结束迭代器 | Y | Y | Y |
crbegin() | 返回const反向开始迭代器 | Y | Y | Y |
crend() | 返回const反向结束迭代器 | Y | Y | Y |
assign() | 用新元素替换原有内容 | - | Y | Y |
operator=() | 复制同类型容器的元素,或者用初始化列表替换现有内容 | Y | Y | Y |
size() | 返回实际元素个数 | Y | Y | Y |
max_size() | 返回元素个数的最大值 | Y | Y | Y |
capacity() | 返回当前容量 | - | Y | - |
empty() | 返回true,如果容器中没有元素的话 | Y | Y | Y |
resize() | 改变实际元素个数的最大值 | - | Y | Y |
shrink_to_fit() | 将内存减少到等于当前元素实际所使用的大小 | - | Y | Y |
front() | 返回打一个元素的引用 | Y | Y | Y |
back() | 返回最后一个元素的引用 | Y | Y | Y |
operator[]() | 使用索引访问元素 | Y | Y | Y |
at() | 使用进过边界检查的索引访问元素 | Y | Y | Y |
push_back() | 在序列的尾部添加一个元素 | - | Y | Y |
insert() | 在指定的位置插入一个或多个元素 | - | Y | Y |
emplace() | 在指定的位置直接生成一个元素 | - | Y | Y |
emplace_back() | 在序列尾部生成一个元素 | - | Y | Y |
pop_back() | 移出序列尾部的元素 | - | Y | Y |
erase() | 移出一个元素或一段元素 | - | Y | Y |
clear() | 移出所有的元素,容器大小变为0 | - | Y | Y |
swap() | 交换两个容器的所有元素 | Y | Y | Y |
data() | 返回包含元素的内部数组的指针 | Y | Y | - |
list, forward_list容器的函数成员
函数成员 | 说明 | list<T> | forward_list<T> |
begin() | 返回开始迭代器 | Y | Y |
end() | 返回结束迭代器 | Y | Y |
rbegin() | 返回反向开始迭代器 | Y | - |
rend() | 返回反向结束迭代器 | Y | - |
cbegin() | 返回const开始结束迭代器 | Y | Y |
before_begin() | 返回一个指向第一个元素前一个位置的迭代器 | - | Y |
cbefore_begin() | 返回一个指向第一个元素前一个位置的const迭代器 | - | Y |
cend() | 返回const结束迭代器 | Y | Y |
crbegin() | 返回const反向开始迭代器 | Y | - |
crend() | 返回const反向结束迭代器 | Y | - |
assign() | 用新元素替换原有内容 | Y | Y |
operator=() | 复制同类型容器的内容,或者用初始化列表替换现有内容 | Y | Y |
size() | 返回实际元素个数 | Y | - |
max_size() | 返回元素个数的最大数 | Y | Y |
resize() | 改变实际元素的个数 | Y | Y |
empty() | 返回true,如果容器中没有元素的话 | Y | Y |
front() | 返回第一个元素的引用 | Y | Y |
back() | 返回最后一个元素的引用 | Y | - |
push_back() | 在序列的尾部添加一个元素 | Y | - |
push_front() | 在序列的起始位置添加一个元素 | Y | Y |
emplace() | 在指定位置直接生成一个元素 | Y | - |
emplace_after() | 在指定位置的后面直接生成一个元素 | - | Y |
emplace_back() | 在序列尾部生成一个元素 | Y | - |
emplace_front() | 在序列的起始位置生成一个元素 | Y | Y |
insert() | 在指定的位置插入一个或多个元素 | Y | - |
insert_after() | 在指定位置的后面插入一条或多个元素 | - | Y |
pop_back() | 移出序列尾部的元素 | Y | - |
pop_front() | 移出序列头部的元素 | Y | Y |
reverse() | 反向元素的顺序 | Y | Y |
erase() | 移除指定位置的一个元素或一段元素 | Y | - |
erase_after() | 移除指定位置后面的一个元素或一段元素 | - | Y |
remove() | 移除所有和参数匹配的元素 | Y | Y |
remove_if() | 移除满足一元函数条件的所有元素 | Y | Y |
unique() | 移除所有连续重复的元素 | Y | Y |
clear() | 移除所有的元素,容器大小变为0 | Y | Y |
swap() | 交换两个容器的元素 | Y | Y |
sort() | 对元素进行排序 | Y | Y |
merge() | 合并两个有序容器 | Y | Y |
splice() | 移动指定位置前面的所有元素到另一同类型的list中 | Y | - |
splice_after() | 移动指定位置后面的所有元素到另一同类型的list中 | - | Y |
总结
- array<T, N>容器可以存放N个类型为T的元素
- vector<T>容器可以存储任意个数的T类型元素
- 可以在vector的末尾高效地添加或删除元素;但在序列内部添加或删除元素会变慢,因为需要移动元素
- 可以使用索引来访问vector中的元素,或者调用会检查索引的成员函数at()
- deque<T>是一个双端队列,可以存储任意个数的T类型元素
- 可以在deque容器的头部和尾部高效地添加或删除元素
- array, vector, deque容器提供了const和non-const随机访问迭代器和反向迭代器
- list<T>是一个存储T类型元素的双向链表
- 只能以从序列头部或尾部遍历元素的方式访问list容器中的元素
- list容器提供双向迭代器
- forward_list<T>容器以单链表的形式存储T类型的元素,但是比list容器更快,更简单
- forward_list容器提供正向迭代器