简介
标准库类型vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象。 因为vector“容纳着”其他对象,所以它也常被称为容器。 想用vector,必须包含适当的头文件。
#include <vector>
using std::vector;
C++既有类模板也有函数模板,其中vector是一个类模板。只有对C++有了相当深入的理解才能写出模板。 模板本身不是类或函数,相反可以将模板看坐为编译器生成类或函数编写的一份说明。 也就是说,编译器会根据模板创建类或者函数,这个过程称为实例化
举例
vector<int> ivec; //ivec保存int类型的对象
vector<vector<string>> file; //该向量的元素是vector对象
注意
vector难容纳绝大多数类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector。 也就是说,不能
vector<&xxx> ivec; //wrong
定义和舒适化vector对象
1. 默认初始化 最常见的方式就是先定义一个空vector,然后当运行时获取到元素的值后再逐一添加。
2. 列表初始化 注意:
vector<string> artivles = {"a", "an", "the"};
这是赋值方式,等价于:
vector<string> articles;
articles ={"a","an","the"};
推荐使用列表初始化,形式为:
vector<string> artivles{"a","an","the"};
3. 创建指定数量的元素 注意:
vector<int>ivec(10,-1);//10个int类型的元素,每个都被初始化为-1
vector<string> svec(10,"hi!");
4. 值初始化
vector ivec(10)' //10个元素,每个都被初始化为0 ```
列表初始化还是值初始化?
总结:
1. 如果是圆括号,那么提供的值就是用来构造vector对象的。
2. 如果是花括号,那么可以表述为我们想列表初始化该vector对象。也就是说,初始化过程会尽量将花括号内的值当成是元素初始值的列表来处理,只有在无法执行列表初始化时才会考虑其他初始化方式。
2 向vector对象中添加元素
函数:push_back 举例:
vector<int> v2;
for(int i = 0; i != 100; i++){
v2.push_back(i);
}
解释: 先创建一个空的vector,然后经过循环放入。
注意
C和java都是在创建vector对象时若能顺便指定其容量是最好的,然而在C++中没有必要。