已知
定义一个长度为10,每个元素的值为-1的vector数组
vector<int> a(10, -1);
如何定义10个vector
vector<int> a[10];
size()和empty()是所有容器中都有的API,时间复杂度是O(1)的。但是clear()就不是,队列中就没有clear()
vector倍增的思想
在C++中,系统为某一程序分配空间的时候,所需的时间与空间大小无关,与申请次数有关。所以使用vector的时候,尽可能地减少申请次数。32->64->128,先开一个32的,不够了倍增,变成64的,然后go on。 假如数组长度为n, 申请空间(开辟空间)次数是O(log n),额外的copy的次数均摊是O(1),比如push()操作。 从而可见倍增的好处——申请空间的次数不多,并且额外操作的次数也不多。
at()
size()
empty()
clear()
front()/back()
push_back()/pop_back()
begin()/end() a.begin() = a[0],a.end() = a[a.size()] end()表示最后一个数的后面一个数
支持比较运算,按字典序——黑科技
erase() vector的删除操作的时间复杂度是O(n)的
vector的排序
vector<int> a;
a.push_back(3);
a.push_back(4);
a.push_back(1);
sort(a.begin(), a.end()); //从小到大排序
迭代器使用
for(vector<int>::iterator it = a.begin(); it!= a.end(); it++){
cout << *it <<endl;
}
数据查找
vector<int>::iterator tt = find(a.begin(), a.end(), 11);
if(tt != a.end()){
cout << "存在";
}else{
cout << "不存在";
}
逆序
vector<int> a;
a.push_back(3);
a.push_back(4);
a.push_back(1);
reverse(a.begin(), a.end());
所以我打了多少字?