vector可用于代替C++中的数组,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用的默认容器,STL中向量是使用数组实现的,因此向量具有顺序表的特点,可以快速随机存取数据。向量是一种数据类型的对象的集合,每个对象根据其位置有一个整数索引值与其对应,类似于数组。
使用向量之前,必须包含相应的头文件:
#include<vector>
using std::vector
同时也应当注意,vector是一个模板类,而非数据类型。所以在定义对象时必须说明vector保存的对象类型。以下给出一些初始化的例子:
1 vector<int> v; //定义向量对象 2 vector<int> v(v1); //定义向量对象v,并且用v1初始化 3 vector<int> v2(n,i); //定义向量对象v2,包含了n个值为i的元素 4 vector<int> v3(n); //定义向量对象v3,其中包含了n个元素值为0的元素
接着介绍一种使用数组初始化向量元素的方式,这种方式在刷题时非常常见,有必要掌握:
1 #include "stdafx.h" 2 #include <stdio.h> 3 #include <string.h> 4 #include <iostream> 5 #include <vector> 6 #include <algorithm> 7 using namespace std; 8 class Solution { 9 public: 10 int arrayPairSum(vector<int>& nums) { 11 int res = 0; 12 vector<int>::size_type nsize = nums.size(); 13 sort(nums.begin(), nums.end()); 14 for (int i = 0; i<nsize; i += 2) { 15 res += nums[i]; 16 } 17 return res; 18 } 19 }; 20 int main() 21 { 22 Solution a; 23 int num[4] = { 1, 4, 3, 2 }; 24 int numLength = sizeof(num) / sizeof(num[0]); 25 vector<int> nums(num, num + numLength); //使用数组初始化向量 26 for (vector<int>::iterator it = nums.begin(); it != nums.end(); it++) //使用迭代器访问向量元素 27 cout << *it << " "; 28 cout << endl; 29 //cout << a.arrayPairSum(nums) << endl; 30 return 0; 31 32 }
这里有两点需要说明:1、迭代器类似于指针,可以用迭代器访问向量中相应的元素;2、nums.begin()表示迭代器指向nums的第一个元素,但是nums.end()则表示迭代器指向nums最后一个元素的下一个元素,实际上是不对应数值的,在使用时要多加小心。
vector的使用其实还可以调用一些常用的借口,比如insert,push_back之类的,vector的接口使用说明参见:
http://www.cplusplus.com/reference/vector/vector/?kw=vector
在此不再赘述。