Vector是C++标准程序库中的一个类,可视为会自动扩展容量的数组,以循序(Sequential)的方式维护变量集合。vector的特色有支持随机存取,在集合尾端增删元素很快,但是在集合中间增删元素比较费时。
vector是C++标准程序库中的众多容器(container)之一。 vector以模板(泛型)方式实现,可以保存任意类型的变量,包括用户自定义的数据类型,例如:它可以是放置整数(int)类型的vector、也可以是放置字符串(string)类型的 vector、或者放置用户自定类别(user-defined class)的vector。
vector 定义于<vector>头文件中。与其他STL组件一样,vector属于std名称空间。
访问元素的方法
vec[i] – 访问索引值为 i 的元素引用。 (索引值从零起算,故第一个元素是vec[0]。)
vec.at(i) – 访问索引值为 i 的元素的引用,以 at() 访问会做数组边界检查,如果访问越界将会抛出一个例外,这是与operator[]的唯一差异。
vec.front() – 回传vector第一个元素的引用。
vec.back() – 回传vector最尾端元素的引用。
新增或移除元素的方法
vec.push_back() – 新增元素至vector的尾端,必要时会进行内存配置。
vec.pop_back() – 删除vector最尾端的元素。
vec.insert() – 插入一个或多个元素至 vector 内的任意位置。
vec.erase() – 删除vector中一个或多个元素。
vec.clear() – 清空所有元素。
获取长度/容量
vec.size() – 获取vector目前持有的元素个数。
vec.empty() – 如果vector内部为空,则传回true值。
vec.capacity() – 获取vector目前可容纳的最大元素个数。这个方法与内存的配置有关,它通常只会增加,不会因为元素被删减而随之减少。
重新配置/重置长度
vec.reserve() – 如有必要,可改变vector的容量大小(配置更多的内存)。在众多的 STL 实例,容量只能增加,不可以减少。
vec.resize() – 改变vector目前持有的元素个数。
迭代 (Iterator)
vec.begin() – 回传一个Iterator,它指向vector第一个元素。
vec.end() – 回传一个Iterator,它指向vector最尾端元素的下一个位置(请注意:它不是最末元素)。
vec.rbegin() – 回传一个反向Iterator,它指向vector最尾端元素的。
vec.rend() – 回传一个Iterator,它指向vector的第一个元素。
示例代码
#include <iostream> #include <vector> #include <algorithm> #include <iomanip> #include <cstdlib> #include <ctime> using namespace std; bool compare(int &a, int &b) { return a < b; } int main(void) { vector<int> vec; srand((unsigned int)time(NULL)); // 插入 for(int i=0; i<10; i++) { vec.push_back(rand()%100); } // 遍历 - 范围for循环 for(int i : vec) { cout << setw(6) << i; } cout << endl; // 修改 for(int &i : vec) { i = i * i; } // 遍历 - vector下标 for(vector<int>::size_type index = 0; index < vec.size(); index++) { cout << setw(6) << vec[index]; } cout << endl; // 倒转 reverse(vec.begin(), vec.end()); // 遍历 - 迭代器 for(vector<int>::iterator it = vec.begin(); it != vec.end(); it++) { cout << setw(6) << *it; } cout << endl; // 排序 sort(vec.begin(), vec.end(), compare); for(auto i : vec) { cout << setw(6) << i; } cout << endl; return 0; }
运行结果
[ycxie@fedora Workspace]$ g++ testvector.cpp -o testvector -Wall [ycxie@fedora Workspace]$ ./testvector 50 49 69 36 89 21 36 23 28 86 2500 2401 4761 1296 7921 441 1296 529 784 7396 7396 784 529 1296 441 7921 1296 4761 2401 2500 441 529 784 1296 1296 2401 2500 4761 7396 7921 [ycxie@fedora Workspace]$ ./testvector 61 88 24 5 22 84 66 42 64 43 3721 7744 576 25 484 7056 4356 1764 4096 1849 1849 4096 1764 4356 7056 484 25 576 7744 3721 25 484 576 1764 1849 3721 4096 4356 7056 7744 [ycxie@fedora Workspace]$ ./testvector 10 19 95 5 46 7 78 99 60 98 100 361 9025 25 2116 49 6084 9801 3600 9604 9604 3600 9801 6084 49 2116 25 9025 361 100 25 49 100 361 2116 3600 6084 9025 9604 9801