vector是大小可变的array
优势:查找快速,在尾部增加删除迅速
实现原理
vector和array一样,占用一段连续的存储空间,这意味着它们可以通过指针的偏移量来访问。
vector使用动态array存储数据,当新插入的数据达到array的存储长度时,需要重新分配内存空间同时移动array中的数据到新空间这个代价很大,因而vector的实际空间大于需要存储数据的空间,分配额外的空间去存储可能要存储的数据。
定义和初始化
- 定义空的vector
vector<T> v;
- 定义一个vector副本
vector<T> v1(v);
- 定义并初始化
vector<T> v(n,i);//定义一个长度为n,初始值为i的vector
- 定义特定长度
vector<T> v(n);
基本操作
Capacity
size():返回vector的大小
empty():返回vector是否为空
Element access
front():返回vector第一个元素的值
end():返回vector最后一个元素的值
Modifiers
push_back(val):给vector增加一个新的元素
pop_back():删除vector最后一个元素
insert(vector迭代器的位置,值)或insert(vector迭代器的位置,长度,值)或insert(vector迭代器的位置,迭代器的位置1,迭代器的位置2)
#include <iostream>
#include <vector>
int main()
{
std::vector<int> vec(20, 2);
std::vector<int> res;
std::vector<int>::iterator it = res.begin();
res.insert(it, 2, 10);
res.insert(it + 2, vec.begin(), vec.end());
res.insert(it, vec.begin(), vec.begin() + 2);
return 0;
}
遍历
遍历通常有两种方法
- 通过下标
- 利用迭代器
#include <iostream>
#include <vector>
int main()
{
std::vector<int> vec(10);
for (int i = 0; i < vec.size(); i++) {
std::cout << vec[i] << std::endl;
}
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
std::cout <<*it<< std::endl;
}
return 0;
}