9.1 顺序容器的定义--C++ Primer ReadNote
2016-06-10 本文已影响44人
jdzhangxin
9.1 顺序容器的定义
顺序容器Sequential Container主要有三种:vector
、list
和deque
。
主要区别在于访问元素的方式和增删操作的代价。
Container | 特点 |
---|---|
vector |
支持快速随机访问 |
list |
支持快速插入删除 |
deque |
双端队列 |
9.1.1容器元素的初始化
顺序容器初始化主要有5种:
语法 | 容器构造法 | 适用范围 | 说明 |
---|---|---|---|
C <T> c |
默认构造函数 | 所有容器 | C是容器类型名,T是元素类型, |
C c(c1) |
复制构造函数 | 所有容器 | c1和c必须相同容器类型和元素类型 |
C c(it_b,it_e) |
部分复制 | 所有容器 | it_b与it_e是迭代器 |
C c(n,t) |
指定初始化元素数目和默认值 | 顺序容器 | n是个数,t是元素默认值 |
C c(n) |
指定初始化元素数目 | 顺序容器 | n是个数,默认值是0或者空 |
-
默认初始化
最常用、最简单、最佳运行时性能:C<T> c
-
其他初始化
完全复制:C c(c1)
部分复制:C c(it_b,it_e)
指定初始化元素数目:C c(n)
指定初始化元素数目和默认值:C c(n,t)
9.1.2 容器内元素类型的约束
基本元素类型约束:可复制可赋值
不能作为容器元素类型举例如下:
No. | 类型 | 原因 |
---|---|---|
1 | 引用类型 | 不可赋值 |
2 | auto_ptr |
不可复制 |
3 | IO库类型 | 不可复制赋值 |
- 容器操作的特殊要求
支持复制和赋值是容器元素类型的最低要求,一些容器操作需要特殊要求。例如:
操作 | Operation | 约束 |
---|---|---|
空容器初始化 | C<T> c |
最低约束 |
指定元素个数和参数的容器初始化 | C c(n,t) |
带参数t相同类型形参的构造函数 |
指定元素个数的容器初始化 | C c(n) |
默认构造函数 |
例如:Foo
是一个没有默认构造函数,但是有一个int
型形参的构造函数。
vector<Foo> empty; // ok,不需要默认构造函数
vector<Foo> bad(10);// error,需要默认构造函数
vector<Foo> ok(10,1);// ok,需要`int`型形参的构造函数
2.容器的容器
容器本身可以作为容器的元素类型。例如:vector<vector<int> >
。
注意,最后两个>
之间需要有一个空格。C++11已经没有这个要求了
收获
本节主要讲解Sequential Container的三个容器(vector
,list
,deque
)和五种通用初始化方式;容器对元素类型是有最低约束的(可复制可赋值),其他一些操作也会对元素有特殊约束要求。