一、顺序容器的定义
容器是容纳特定类型对象的集合。这种容器根据位置来存储和访问元素。就是顺序容器
二、容器适配器
根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型
四、容器的定义
所有的容器都是类模板,要定义一种特殊的容器,必须实例化
注意事项:
1、将一个容器初始化给另一个容器的副本
要求:容器类型和元素类型必须相同
2、初始化一段元素的副本
系统允许通过传递一对迭代器间接实现将一种容器内的元素赋值给另一种容器
不要求类型相同和大小相同
3、分配和初始化指定书目的元素
创建容器时,可以显式指定容器的大小和一个可选的初始值
4、不提供元素初始值时,标准库将为该容器实现值初始化。但这种初始化有限制,元素的类型必须是内置或复合类型,或者提供了默认构造函数的类类型。如果没有默认构造函数,必须显式的指定其元素初始化值
5、只有顺序容器接受容器大小做形参的构造函数
6、c++语言容器的元素类型
必须支持赋值运算
元素类型的对象必须可以复制
7、容器的容器
容器是容纳特定类型对象的集合。这种容器根据位置来存储和访问元素。就是顺序容器
二、容器适配器
根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型
三、顺序容器的类型和容器适配器
顺序容器 |
| 容器适配器 |
|
vector | 支持快速随机访问 | stack | 后进先出(LIFO) |
list | 支持快速插入/删除 | queue | 先进先出(FIFO) |
deque | 双端队列 | priority_queue | 有优先级管理的队列 |
四、容器的定义
所有的容器都是类模板,要定义一种特殊的容器,必须实例化
vector<string> vs;
list<int> li;
deque<float> df;
五、容器的构造函数
C<T> c; | 创建一个名为c的空容器。C是容器类型名,如vector,T是元素类型,如int或string适用于所有容器 |
C c(c2); | 创建容器c2的副本c;c和c2必须具有相同的容器类型,并存放相同类型的元素。适用于所有容器。 |
C c(b,e); | 创建c,其元素是迭代器b和e标示的范围内元素的副本。 适用于所有容器 |
C c(n, t); | 用n个值为t的元素创建容器c,其中值t必须是容器类型C的元素类型的值,或者是可转换为该类型的值。 只适用于顺序容器 |
C c(n); | 创建有n个值初始化元素的容器c 只适用于顺序容器 |
1、将一个容器初始化给另一个容器的副本
要求:容器类型和元素类型必须相同
2、初始化一段元素的副本
系统允许通过传递一对迭代器间接实现将一种容器内的元素赋值给另一种容器
不要求类型相同和大小相同
vector<string> vs;
list<int> li;
deque<float> df;
list<string> tls(vs.begin(),vs.end());
deque<float>::iterator mid = df.begin()+df.size()/2;
list<string> lst(mid,df.end());
3、分配和初始化指定书目的元素
创建容器时,可以显式指定容器的大小和一个可选的初始值
const list<int>::size_type list_size = 100;
list<string> slist(list_size,"hhh");
4、不提供元素初始值时,标准库将为该容器实现值初始化。但这种初始化有限制,元素的类型必须是内置或复合类型,或者提供了默认构造函数的类类型。如果没有默认构造函数,必须显式的指定其元素初始化值
5、只有顺序容器接受容器大小做形参的构造函数
6、c++语言容器的元素类型
必须支持赋值运算
元素类型的对象必须可以复制
7、容器的容器
vector<vector<int>> lines;
六、迭代器的运算
所有标准库都提供的迭代器运算 | |
*iter | 返回迭代器iter所指向的元素的引用 |
iter-> mem | 对iter进行解引用,获取指定元素中名为mem的成员。等效于(*iter).mem |
++iter/iter++ | 给iter加1,使其指向容器里的下一个元素 |
--iter/iter-- | 给iter减1,使其指向容器里的前一个元素 |
iter1== iter2 iter1!= iter2 | 比较两个迭代器是否相等(或不等)。当两个迭代器指向同一个iter2容器中的同一个元素,或者当它们都指向同一个容器的超出末端iter1!=的下一位置时,两个迭代器相等. |