标准库vector类型,是一种顺序容器(sequential container)。它将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。
容器只定义了少量操作。大多数额外操作则由算法库提供,标准库为由容器类型定义的操作强加了公共的接口。这些容器的类型的差别在于它们提供了哪些操作,但是如果两个容器提供了相同的操作,则它们的接口应该相同。容器类型的操作集合形成了以下层次结构:
- 一些操作适用于所有容器类型
- 另外一些操作则只适用于顺序或关联容器类型
- 还有一些操作只适用于顺序或关联容器类型的一个子集。
为了使程序更清晰、简短,容器类型最常用的构造函数是默认构造函数。在大多数的程序中,使用默认构造函数能达到最佳运行时性能,并且使容器更容易使用。
9.1.1 容器元素的初始化
1. 将一个容器初始化为另一个容器的副本
将一个容器复制给另一个容器时,类型必须匹配:容器类型和元素类型都必须相同。
vector<int> i;
vector<int> j(i);
2. 初始化为一段元素的副本
尽管不能直接将一种容器内的元素复制给另一种容器,但系统允许通过传递一对迭代器间接实现该功能。
vector<int> i;
list<int> k(i.begin(), i.end());
3.分配和初始化指定数目的元素
创建顺序容器时,可显式指定容器大小和一个(可选的)元素初始化式。容器大小可以是常量或非常量表达式,元素表达式则必须是可用于初始化其元素类型的对象的值。
list<int> k(10, 10);
for(list<int>::iterator i = k.begin(); i!=k.end(); ++i)
{
cout << *i << endl;
}
接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这种初始化。