目录
在竞赛中如果要用到动态顺序表,C++的STL为我们提供了已经封装好的容器——vector(可变长数组),vector的底层就是一个会自动扩容的顺序表,其创建和增删查改的逻辑已经实现好了,并完成了封装
1.vector的创建
2.size( ),empty( )
size( ):返回实际元素的个数
empty( ):返回顺序表是否为空,返回值是bool类型数据
size()函数用于返回vector中实际元素的个数。例如,若vector vec中存储了5个元素,则vec.size()将返回5。该操作的时间复杂度为O(1),因为vector内部会维护一个记录元素数量的信息,获取该信息无需遍历整个容器。
empty()函数用于判断vector是否为空。若vector中无任何元素,empty()将返回true;否则返回false。同样,该操作的时间复杂度也为O(1),因为它仅需检查维护的元素数量信息是否为0。
3.begin( ),end( )
begin( ):返回起始位置的迭代器
end( ):返回终点位置下一个位置的迭代器
我们可以用迭代器访问整个vector,存在迭代求可以使用范围for
使用范围for遍历
4.push_back( ),pop_back( )
push_back( ):尾部添加一个元素
pop_back( ):尾部删除一个元素
时间复杂度是O(1)
5.front( ),back( )
front( ):返回首元素
back( ):返回尾元素
时间复杂度同样都是O(1)
6.resize( )
resize() 函数是用于修改 vector 容器的大小的成员函数。
当使用 resize() 函数使 vector 容器变大时,新增的元素会被自动初始化为默认值,对于数值类型,默认值为0。相反,如果 resize() 函数被用来减小 vector 容器的大小,那么所有超出新大小的元素都会被删除。
举个例子,如果我们有一个 int 类型的 vector 容器 b1,初始大小为5,且所有元素都被初始化为1,即 vectorb1(5, 1);。随后,我们调用 b1.resize(10);,此时,b1 的大小会被修改为10,而新增的5个元素会被自动初始化为0。因此,修改后的 b1 容器中的元素依次是 1, 1, 1, 1, 1, 0, 0, 0, 0, 0。
7.clear( )
会遍历整个元素,一个个删除,因此时间复杂度是O(n)级别的