顺序容器介绍
- vector 可变大小数组。支持快速随机访问。在尾部之外的位置插入或者删除元素可能很慢。
- deque 双端队列。支持快速随机访问。在头尾位置插入或者删除速度很快。
- list 双向链表。只支持双向顺序访问。在list中任何位置进行插入或者删除速度都很快。
- forward_list 单向链表。只能支持单向顺序访问。在链表任何位置进行插入或者删除操作都很快。
- array 固定大小数组。支持快速随机访问。不能添加或者删除元素。
- string 与vector相似的容器,但是专门用于保存字符,随机访问速度很快,在尾部插入或者删除速度很快。
容器库
迭代器
- 标准容器类型上的所有迭代器都允许我们访问容器中的元素,而迭代器都是通过解引用运算符来实现这个操作的,所以标准库容器中的所有迭代器都定义了递增运算符,从当前元素移动到下一个元素,而对于递减运算符除了forwaard_list之外其他容器都支持递减操作。
- 迭代器范围,一个迭代器范围由一对迭代器表示,两个迭代器分别指向同一个容器中的元素,通常称为begin、end,此时容器中的元素范围用区间表示为[begin,end),表示区间从begin元素开始,与end(end前一个元素为最后一个元素)之前结束。
- 如果begin!=end,那么容器中至少包括一个元素。
- 如果begin==end,则范围为空。
- 除了begin、end迭代器,还有cbegin、cend、rbegin、rend、crbegin、crend,带c开头的表示返回const迭代器,以r开头的表示返回反向迭代器,反向迭代器+const表示返回反向常量迭代器。
容器定义和初始化
每个容器都定义了默认构造函数,除了array之外,其他容器在定义的时候都会创建一个空容器。
C c; // 默认构造函数.若是一个array,则c中元素按默认方式初始化.否则为空.
C c1(c2); // c1初始为为c2的拷贝.注意! 类型相同(容器类型,元素类型).对于array,大小还必须相同.
C c1=c2;
C c{a,b,c}; // 初始化为初始化列表中元素的拷贝.
C c={a,b,c};
C c(b,e); // 迭代器初始化.c初始化为b和e指定范围中的元素的拷贝.
C seq(n); // seq包含n个元素.这些元素进行了初始化.
C seq(n,t); // 初始化了n个元素.值都为t.