摘自<<C++ Primer>> 5th, chapter 3
vector
a class template; a collection of objects, all of which have the same type
1 初始化
vector<T> v1
vector<T> v2(v1) vector<T> v2 = v1;
vector<T> v3(n, val) vector<T> v4(n);
vector<T> v5{a, b, c...} vector<T> v5= {a, b, c...}
例1):
vector<int> ivec; // initally empty vector<int> ivec2(ivec); vector<string> svec(10, "hi!"); //10 elements, each is a string "hi!" vector<string> articles = {"a", "an", "the"}; vector<int> v1(10, 1); // 10 elements with value 1 vector<int> v2{10, 1}; // 2 elements with values 10 and 1 View Code
2 添加元素
it's better to create an empty vector and use push_back to add elements at run time.
例 2):
vector<int> ivec; for(int i = 0; i != 100; i++) ivec.push_back(i); sting s; vector<sting> svec; while(cin > s) { svec.push_back(s); } View Code
3 操作
v.empty()
v.size() return the number of elements in v
v[n] return a reference to the element at positon n in v
v1 = v2
v1 = {a, b, c...}
v1 == v1 v1 != v2
<, <=, >, >=
例 3):
vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9}; for(auto &i: v) // for each element in v (i is a reference) i * = i; for(auto i: v) cout << i << " "; cout < endl; View Code
4 using subscripts
1) computing a vector index
// count the number of grades by clusters of ten: // 0~9, 10~19, ..., 90~99, 100 vector<unsigned> scores(11, 0); unsigned grade; while(cin >> grade) { if (grade <= 100) ++scores[grade/10]; } View Code2) subscripting does not add elements
vector<int> ivec; for(decltype(ivec.size()) ix = 0; ix != 10; ++ix) ivec[ix] = ix; // disaster: ivec has no elements ivec.push_back(ix); View Codethe subscript operator on vector(and sting) fetches an existing element; it does not add an element.