vector能容纳绝大多数类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector。
使用vector需要包含头文件vector。
1、初始化vector对象的方法
1)vector<T> v1; // v1是一个空vector,它潜在的元素是T类型的,执行默认初始化。
2)vector<T> v2(v1); // v2中包含有v1所有元素的副本。
3)vector<T> v2 = v1; // 等价于v2(v1)
4)vector<T> v3(n, val); // v3包含了n个重复的元素val
5)vector<T> v4(n); // v4包含了n个重复地执行了值初始化的对象。如果vector对象的元素是元素内置类型,比如int,则元素初始值自动设为0;如果元素是某种类类型,比如string,则元素由类默认初始化。
6)vector<T> v5{a,b,c,...} // v5包含了初始值个数的元素,每个元素被赋予相应的初始值
7)vector<T> v5={a,b,c,...} // 等价于v5{a,b,c,...}
注意:如果用的是花括号,可以表述成我们想列表初始化该vector对象。初始化过程会尽可能地把花括号内的值当成元素初始值的列表来处理,只有在无法执行列表初始化时才会考虑其他初始化方式。
1 int main() 2 { 3 vector<int> v1(10); // 10个值为0的元素 4 vector<int> v2{ 10 }; // 一个值为10的元素 5 vector<int> v3(10, 1); // 10个值为1的元素 6 vector<int> v4{ 10, 1 }; // 2个元素,分别是10,1 7 vector<string> v5{ 10 }; // 10个默认初始的元素 8 vector<string> v6{ 10, "hello" }; // 10个值为"hello"的元素 9 return 0; 10 }
允许使用数组来初始化vector对象,需要指明拷贝区域的首元素地址和尾后地址。
1 int main() 2 { 3 int arr[5] = { 1, 2, 3, 4, 5 }; 4 std::vector<int> vec(arr+1, arr+4); // vec有3个元素,分别是2,3,4 5 return 0; 6 }
2、常用操作
1)v.empty() 如果v不含有任何元素,返回真;否则返回假。
2)v.size() 返回v中元素的个数。
3)v.push_back(t) 向v的尾端添加一个值为t的元素。
4)v[n] 返回v中第n个位置上元素的引用。
5)v1 = v2 用v2中元素的拷贝替换v1中的元素。
6)v1={a,b,c,...} 用列表中元素的拷贝替换v1中的元素。
7)v1 == v2 v1和v2相等当且仅当它们的元素数量相同且对应位置的元素值都相同。
8)v1 !=v2
9)<,<=,>,>= 以字典序顺序进行比较
注意:vector对象(以及string对象)的下标运算符可用于访问已存在的元素,而不能用于添加元素。