STL 在头文件 <vector>
提供了一个可变长的数组 vector
,它支持动态的插入、删除操作。
以下代码声明了一个 vector
,它的每个元素类型为 int
,初始元素数量为 0。
std::vector<int> v;
以下代码声明了一个 vector
,它的每个元素类型为 int
,初始元素数量为 n。
std::vector<int> v(n);
vector
提供 begin()
和 end()
,分别获取指向第一个元素和最后一个元素之后的迭代器。
以下代码对 v 中的所有元素以升序排序:
std::sort(v.begin(), v.end());
使用 size()
得到 vector
的元素数量,使用 resize()
重新指定 vector
的元素数量。
分别使用 push_back()
和 pop_back()
在 vector
的尾部加入或删除元素,这两个过程的时间复杂度为O(1)。
使用 insert()
在某个特定的位置插入一个元素,时间复杂度为O(n)。
使用 erase()
删除某个位置的元素,时间复杂度为O(n)。
#include <iostream>
#include <vector>
using namespace std;
vector<int> v;
int main()
{
v.push_back(23333);
cout<<"length="<<v.size()<<" ";
for(int i=0;i<v.size();i++)
cout<<v[i]<<" "; // v.size() = 1, v = { 23333 }
cout<<endl;
v.insert(v.begin()+0,43243);
cout<<"length="<<v.size()<<" ";
for(int i=0;i<v.size();i++)
cout<<v[i]<<" "; // v.size() = 2, v = { 43243, 23333 }
cout<<endl;
v.erase(v.begin()+1);
cout<<"length="<<v.size()<<" ";
for(int i=0;i<v.size();i++)
cout<<v[i]<<" "; // v.size() = 2, v = { 43243 }
cout<<endl;
v.pop_back();
cout<<"length="<<v.size()<<" ";
for(int i=0;i<v.size();i++)
cout<<v[i]<<" "; //v.size() = 0
cout<<endl;
}
注意:在加入元素时,如果 vector
拥有的内存空间不足以存放欲加入的元素,则 vector
会申请一块新的内存,并将旧数据拷贝过去,这个过程通常花费 O(n)的时间。