定义:
vector是容纳特定类型对象的集合,
它根据位置来存储和访问这些元素, 这就是顺序容器, 顺序容器的排序次序与元素值无关, 而是由元素添加到容器里的次序决定的
谈谈标准库:
标准库定义了三种顺序容器类型:vector list deque(双端队列)
它们的差异:
它们的差别在于访问元素的方式,以及添加或删除元素相关的操作的运行代价
标准库还提供了三种容器适配器: 适配器是根据原始的容器类型所提供的操作, 通过定义新的操作接口, 来适应基础的容器类型
顺序容器适配器包括: stack、queue和priority_queue类型
顺序容器类型所包含的头文件: #include <vector>, <list>, <deque>.
注意: 所有容器都是类模板。
容器既然是类模板,那么就是类, 就有类的性质, 就有初始化:
C<T> c; 默认初始化
C c(c2); 创建容器c2的副本
C c(b, e); b, e为两个迭代器, 使用迭代器时,不要类型相同
C c(n, t); 创建n个值为t的元素创建容器c
C c(n); 创建有n个值初始化
容器的迭代器就是一个静态成员:
vector<String>::iterator mid //它的功能是指定迭代器的位置并对数据进行访问
迭代器介绍:
标准库为每一种标准容器定义了一种迭代器类型。 它提供了比下标操作更通用化的方法
因此,如果从下标访问这个角度看: 它应该是一个指针
每一个容器都提供了开始和结束操作, 插入和删除操作, 检测大小操作
如果迭代器是从开始进行, 可以为:
vector<int>::iterator iter=ivec.begin();
容器内元素的类型约束:
满足两个约束: 1 必须支持赋值操作 2 元素类型的对象必须可以复制
除了引用类型, 所有内置或复合类型都可以用作元素类型。标准库里,除了IO类型之外,其它都是有效的容器元素类型。 包括容器本身
上述是容器要求元素类型的最低要求, 一些容器为了满足特殊的操作, 还需要元素类型满足特殊要求
假设: 类Foo没有默认构造函数, 即它不能通过以下操作初始化 Foo foo; 因为他没有默认构造函数,因此系统不会默认给值
但是它定义了一个需要int形参的构造函数, 即Foo foo(1).
如果考虑一个Foo类型的容器, 那么就有
vector<Foo> empty; 该操作表示没有进行任何初始化操作, 即该容器有0个元素, 这是可以的
vector<Foo> bad(10), 该操作表示给Vector容器创建了 10个Foo类型的元素, 但是这10个Foo类型的元素没有进行初始化, 这是肯定不行的。
一种比较好的方式是: vector<Foo>bad(10,1) 表示创建了10个初始化为1的Foo类型。
容器的容器:
这个目前还想不到有何必要 大体可以写成如下格式:
vector< vector<string> > lines
注意: 不要写成 vector< vector<string>> lines 编译器会把>>当中位位移