**以下内容参考 C++ primer **
1.各个容器的概况
| 容器名称 | 容器类型 | 可适用操作 |
|---|---|---|
| vector | 可变大小数组 | 支持快速操作,在尾部进行插入或删除 |
| deque | 双端队列 | 支持随机访问,头尾插入删除很快 |
| list | 双向链表 | 顺序访问,任何位置可进行插入删除 |
| forward_list | 单项链表 | 顺序访问,任何位置进行插入删除 |
| array | 固定数组 | 随机访问,不可插入删除 |
| string | 保存字符 | 顺序访问,尾部插入删除 |
2.如何选容器
- 除非你的程序小,list,forward_list容器空间开销大
- 一般选择vector
- 在中间插入删除元素,list ,forward_list
- 头尾插入或删除元素,但不会在中间位置进行插入删除,使用deque
- 如果输入需要在容器中间插入元素(输入阶段list),随后需要随机访问(拷贝list,到vector中)。
3.容器的操作概况
| 类型 | 说明 |
|---|---|
| iterator | 容器的迭代器类型 |
| const_iterator | 可以读取元素,不能修改元素迭代器的类型 |
| size_type | 容器保存最大的大小(无符号整数类型) |
| difference_type | 带符号整数类型,足够保存两个迭代器之间的距离 |
| value_type | 元素类型 |
| reference | 元素的左值类型,与value_type&含义相同 |
| const_reference | 元素的const左值类型(const value_type&) |
| 构造函数 | 说明 |
|---|---|
| C c | 默认构造函数,构造空容器 |
| C c1(c2) | 构造函数 |
| C c(b,e) | 构造c,将迭代器b和e指定的范围内的元素拷贝到c |
| C c{a,b,c…} | 列表初始化c |
| 大小 | 说明 |
|---|---|
| c.size( ) | c中c1元素替换为c2中元素 |
| c.max_size( ) | c中可保存的最大元素数目 |
| c.empty( ) | 若c中存储了元素,返回false,否则返回true |
| 添加删除 | 说明 |
|---|---|
| c.insert( args ) | 将args中的元素拷贝进c |
| c.emplace (inits) | 使用inits构造c中的一个元素 |
| c.erase(args) | 删除args指定的元素 |
| c.clear( ) | 删除c中的所有元素,返回void |
| 获取迭代器 | 说明 |
|---|---|
| c.begin( ), c.end( ) | 返回指向c的首元素和尾元素之后的位置的迭代器 |
| c.cbegin( ), c.end( ) | 返回const_iterator |
| reverse_iterator | 按照逆序寻址元素的迭代器 |
| const_reverse_iterator | 不能修改元素的逆序迭代器 |
| c.rbeging( ),crend() | 返回指向c的尾元素和首元素之前的迭代器 |
| c.crbegin( ),c.crend( ) | 返回const_reverse_iterator |
本文介绍了C++标准库中的主要容器类型,如vector、deque、list、forward_list、array和string,强调了它们的特点和适用场景。例如,vector适合快速尾部操作,deque支持双端插入删除,list适合任意位置插入删除。此外,文章还概述了容器的构造函数、大小查询、元素添加与删除以及迭代器的使用方法,为选择和操作C++容器提供了指导。

被折叠的 条评论
为什么被折叠?



