vector
std::vector
是 STL 提供的 内存连续的 、 可变长度 的数组(亦称列表)数据结构。能够提供线性复杂度的插入和删除,以及常数复杂度的随机访问。
和普通数组对比
问题 | 普通数组 | vector 数组 |
---|---|---|
定义数组 | int a[N];int a[N] = {0}; // 全初始为 0 | vector<int> a;vector<int> a(N); <br>vector<int> a(N, 1);// 全赋值为 1 |
输入元素 | cin >> a[i]; | cin>>t; a.push_back(t); |
比较两数组相等 | for(int i = 0; i < n; i++){ if(a[i] == b[i]) ....... } | if(a == b) |
删除最后一个元素 | len--; | a.pop_back(); |
删除下标 i 位置的元素 | for(int j = i+1; j < n; j++){ a[j-1] = a[j]; } | a.erase(a.begin()+i, a.begin()+i+1); |
删除下标 t1~t2的所有元素 | 。。。。。。 | a.erase(a.begin()+t1, a.begin()+t2+1); |
在下标 i 处插入一个元素 | for(int j = n+1; j >= i+1; j--){ a[j] = a[j-1]; }a[i] = t; | a.insert(a.begin()+i, t); |
翻转数组 | reverse(a, a+n); | reverse(a.begin(), a.end()); |
排序 | sort(a, a+n); | sort(a.begin(), a.end()); |
为什么要使用 vector
作为 OIer,对程序效率的追求远比对工程级别的稳定性要高得多,而 vector
由于其对内存的动态处理,时间效率在部分情况下低于静态数组,并且在 OJ 服务器不一定开全优化的情况下更加糟糕。所以在正常存储数据的时候,通常不选择 vector
。下面给出几个 vector
优秀的特性ÿ