底层的数据结构:动态开辟的数组,每次以原来空间的2倍进行扩容。
容器的方法都是底层已经设计好的:#include
增加:
vec.push_back(); 末尾添加元素 O(1) 导致容器扩容
vec.insert(it,20); 迭代器 it 指向的位置添加一个元素20 O(n) 导致容器扩容
vector<int> vec;
for(int i = 0;i<20;i++)
{
vec.push_back(rand()%100 + 1);
}
//给奇数前添加一个比自己小1的数
auto it2 = vec.begin();
for(;it2 != vec.end();++it2)
{
if(*it2 % 2 != 0)
{
it2 = vec.insert(it2,*it2-1);
++it2;
}
}
删除:
vec.pop_back(); 末尾删除元素 O(1)
vec.erase(it); 删除it迭代器指向位置的元素 O(n)
//删除所有的偶数
auto it1 = vec.begin();
while(it1 != vec.end())
{
if(*it1 % 2 == 0)
{
it1 = vec.erase(it1);
}
else
{
it1++;
}
}
查询:
operator[] 下角标的随机访问vec[5] O(1)
迭代器进行遍历
find for_each
int size = vec.size();
for(int i = 0;i < size;++i)
{
cout << vec[i] << " ";
}
cout << endl;
auto it = vec.begin();
for(;it != vec.end();++it)
{
cout << *it << " ";
}
cout << endl;
常用方法:
size();
empty();
reserve(20);预留空间的,只会给容器底层开辟指定大小的内存空间,并不会添加新的元素。
resize();容器扩容用的,不仅给容器开辟指定大小的内存空间,还会添加新的元素int()
swap();两个容器进行元素交换