【C++】STL--Vector使用及其模拟实现
构造函数声明constructor接口说明vector() (重点)无参构造(重点)拷贝构造构造并初始化 n 个 val使用迭代器进行初始化构造代码语言:javascriptAI代码解释//无参构造vector(){}//拷贝构造swap(tmp);//初始化n个valreserve(n);i < n;++i)//使用迭代化区间初始化= last)++first;
Vector的使用
vector在日常的使用非常广泛,我们应该熟悉它的常用接口。接下来我们从基础的接口开始,学会它的使用及模拟实现。
vector模拟实现的基本结构:
代码语言:javascript
AI代码解释
template<class T>
class vector
{
public:
typedef T* iterator;
typedef const T* const_iterator;
//无参构造
vector()
:_start(nullptr) //数组首地址
, _finish(nullptr) //当前末尾元素的下一个地址
, _endofstoage(nullptr) //当前分配空间的下一地址
{
}
//资源管理
~vector()
{
if (_start)
{
delete[] _start;
_start = _finish = _endofstoage = nullptr;
}
}
size_t size() const
{
return _finish - _start;
}
size_t capacity() const
{
return _endofstoage - _start;
}
private:
iterator _start;
iterator _finish;
iterator _endofstoage;
};
2.1. vector的定义
|
构造函数声明constructor |
接口说明 |
|---|---|
|
vector() (重点) |
无参构造 |
|
vector (const vector& x); (重点) |
拷贝构造 |
|
vector ( size_type n, const value_type& val = value_type() ) |
构造并初始化 n 个 val |
|
vector (InputIterator first, InputIterator last); |
使用迭代器进行初始化构造 |
代码语言:javascript
AI代码解释
//无参构造
vector()
:_start(nullptr)
, _finish(nullptr)
, _endofstoage(nullptr)
{}
//拷贝构造
void swap(vector<T>& v)
{
std::swap(_start, v._start);
std::swap(_finish, v._finish);
std::swap(_endofstoage, v._endofstoage);
}
//vector(const vector& v)
vector(const vector<T>& v)
:_start(nullptr)
, _finish(nullptr)
, _endofstoage(nullptr)
{
vector tmp(v.begin(), v.end());
swap(tmp);
}
//初始化n个val
vector(size_t n, const T& val = T())
:_start(nullptr)
, _finish(nullptr)
, _endofstoage(nullptr)
{
reserve(n);
for (size_t i = 0; i < n; ++i)
{
push_back(val);
}
}
//使用迭代化区间初始化
template <class InputIterator>
vector(InputIterator first, InputIterator last)
:_start(nullptr)
, _finish(nullptr)
, _endofstoage(nullptr)
{
while (first != last)
{
push_back(*first);
++first;
}
}
2.2. vector迭代器的使用
|
iterator的使用 |
接口说明 |
|---|---|
|
begin+end (重点) |
获取第一个数据位置的 iterator/const_iterator , 获取最后一个数据的下一个位置的 iterator/const_iterator |
|
rbegin+rend(反向迭代器) |
获取最后一个数据位置的 reverse_iterator ,获取第一个数据前一个位置的reverse_iterator |
代码语言:javascript
AI代码解释
iterator begin()
{
return _start;
}
iterator end()
{
return _finish;
}
const iterator begin() const
{
return _start;
}
const iterator end() const
{
return _finish;
}
2.3. vector的空间增长问题
|
容量空间 |
接口说明 |
|---|---|
|
size |
获取数据个数 |
|
capacity |
获取容量大小 |
|
empt |
判断是否为空 |
|
resize(重点) |
改变 vector 的 size |
|
reserve(重点) |
改变 vector 的 capacity |
更多推荐



所有评论(0)