@tingyuge
2016-10-03T13:32:33.000000Z
字数 1334
阅读 1154
C++
标准库类型vector
表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象,因为vector
容纳着其他的对象,所以也称之为容器
。
要使用vector
需要先包含对应的头文件:
#include <vector>
vector
也是一个类模板
,所以要声明vector
对象时和其他的模板一样:
vector<int> iVec; // iVec保存int类型的对象
vecotr<vector<string>> sVec; // sVec保存vector对象
vector
对象
vector<T> vec; // vec是一个空的vector,他能接受的类型为T,执行默认初始化
vector<T> vec2(vec); // vec2中包含vec所有元素的副本
vector<T> vec2 = vec; // 等价于vec2(vec);
vector<T> vec(n, val); // vec包含了n个重复的元素,每个元素的值都是val
vector<T> vec2(n); // vec2包含n个重复的执行了T的初始化的对象
vector<T> vec{a, b, c}; // vec包含了a, b, c
vector<T> vec = {a, b, c}; // 等价于vec{a, b, c}
这里要注意vec(n)
与vec{n}
的区别:
vector<int> vec(10); // vec有10个元素,每个值都是0
vecotr<int> vec{10}; // vec有1个元素,该元素的值是10
push_back()
负责把一个值当成vector
对象的尾元素压倒对象的最后。例如:
vector<int> vec;
for (int i = 0; i != 100; i++) {
vec.push_back(i);
} // 循环结束后vec中100个元素,值从0到99
然而在通过循环向vector中添加元素的时候,最好不要使用for...in...
循环,因为添加使得vec.end()
失效,使用for...in...
循环不能正常工作。
既然vector
是一个集合容器,那我们就可以通过便利的方式去一个一个的访问元素:
vector<int> vec{1, 2, 3, 4, 5, 6};
for (auto &i:vect) {
i *= i;
} // 将vec中的每个元素平方
int sum = 0;
for (auto i:vec) {
sum += i;
} // 计算vec元素之和
当然也可以使用下标去访问对象:
for (decltype(v.size()) i = 0, size = v.size(); i != size; i++) {
v.push_back(v[i]);
} // 通过循环把vec的元素拷贝一份到原来的元素后面。
除了添加元素用的push_back()
之外,vector还提供了几种其他操作,大多都和string
的相关操作类似。
vec.empty();
vec.size();
vec.push_back(t);
vec[n];
vec1 = vec2;
vec = {a, b, c};
vec1 == vec2; // vec1和vec2相等当且仅当他们的元素数量相同且对应位置的元素都相同
vec1 != | < | <= | > | >= vec2;