vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预。
vector 为变长数组,体现倍增思想,储存在#include
vector 擅长在尾部插入或删除元素,在常量时间内就可以完成,时间复杂度为O(1)
;而对于在容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n)
可以创建一个vector容器:vector<int> name/vector<double> name
, <>中标出vector容器的类型
可以在创建的同时指定初始值以及元素个数:vector<int> primes = {2, 3, 5, 7, 11, 13, 17, 19};
也可以指定元素个数:vector<double> values(20);
,且这二十个元素初始值均为0
注意:圆括号 ( ) 和大括号 { } 是有区别的,前者(例如(20)表示元素的个数,而后者(例如{20})则表示 vector 容器中只有一个元素 20
也可以指定其他元素做初始值:vector<double> values(20, 1.0);
,这20个元素初始值均为1.0
值得一提的是,圆括号 ( ) 中的 2 个参数,既可以是常量,也可以用变量来表示:
int num=20; double value =1.0; vector<double> values(num, value);
通过存储元素类型相同的其它 vector 容器,也可以创建新的 vector 容器:
vector<int>value1 = {1,2,3,4,5}; vector<int>value2(value1); // value2容器的元素和value1容器的元素相同,都是 1,2,3,4,5
在此基础上,如果不想复制其它容器中所有的元素,可以用一对指针或者迭代器来指定初始值的范围:
vector<int> a = {1,2,3,4,5}; vector<int> b(a.begin(), a.begin()+3); // b容器内的元素为 1,2,3 int c[] = {1,2,3,4,5}; vector<int> d(c, c+3); // d容器内的元素为 1,2,3
特别的,vector不能重复定义同一个容器,否则报错
通过迭代器循环vector容器的方法:
vector<char> value = {'S','T','L'}; for (vector<char>::iterator i = value.begin();i != value.end();i ++) { cout << *i << endl; }
for循环中的vector
另外,vector支持比较运算,比较方式为字典序:
vector<int> a = {3,3}; vector<int> b(4,2); // b = {2,2,2,2} if (a > b) cout << "a > b"; // 输出 a > b