STL的vector容器是一种动态数组,它实现了在尾部插入或删除元素时,时间复杂度为O(1),而在头部或中部插入或删除元素时,时间复杂度为线性阶O(n)。相比静态数组,vector可以动态扩展内存空间,而不需要像数组那样预先分配固定的内存空间。
vector容器的迭代器是支持随机访问的迭代器,这使得vector在访问元素时具有很高的效率。vector容器提供了许多操作函数,例如push_back()用于在尾部添加元素,erase()用于删除元素,insert()用于在指定位置插入元素等。
在C++中,vector容器的定义方式为:std::vector<T> v;其中,std是命名空间,vector是类名,T是存储元素的类型,v是对象名。可以通过使用push_back()函数或者使用下标运算符[]来向vector中添加或访问元素。
vector容器是一种非常实用的动态数组,它具有高效的插入、删除和访问功能,并且可以动态扩展内存空间。
构造函数和析构函数
vector()//构造函数
:_start(nullptr)
,_finish(nullptr)
,_endofstorage(nullptr)
{}
~vector()//析构函数
{
delete[] _start;
_start = _finish = _endofstorage = nullptr;
}
获取第一个和最后一个数据
iterator begin()//第一个位置(迭代器)
{
return _start;
}
iterator end()//最后一个位置的下一位
{
return _finish;
}
const_iterator begin() const
{
return _start;
}
const_iterator end() const
{
return _finish;
}
扩容函数和下标访问
void reserve(size_t n)//扩容函数
{
if (n > capacity())
{
size_t sz = size();
T* tmp = new T[n];
if (_start)
{
//memcpy会有增容问题(按字节拷贝造成浅拷贝
//memcpy(tmp, _start, sizeof(T) * sz);
for(size_t i=0;i<sz;i++)
{
tmp[i] = _start[i];//调用operator=,是深拷贝
}
delete[] _start;
}
_start = tmp;
_finish = tmp + sz;
_endofstorage = tmp + n;
}
}
T& operator[](size_t i)//下标访问
{
assert(i < size());
最低0.47元/天 解锁文章
811

被折叠的 条评论
为什么被折叠?



