【C++初阶】第十站:vector 中通用函数的模拟实现
目录
vector中的三个重要迭代器
默认成员函数
构造函数(无参构造)
构造函数(函数模板)
构造函数(带有默认参数)
size_t
int
拷贝构造函数
赋值重载
析构函数
迭代器相关函数
begin和end
容量和大小相关函数
size
capacity
resize
修改容器内容相关函数
reserve
push_back
insert
情况一:pos迭代器失效
情况二: insert之后迭代器失效
erase
情况三:vs2019进行强制检查,erase以后认为it失效了,不能访问,访问就报错
访问容器相关函数
operator[ ]
const operator[ ]
前言:
🎯个人博客:Dream_Chaser
🎈博客专栏:C++
📚本篇内容:vector类通用函数的模拟实现
vector中的三个重要迭代器
在vector当中有三个成员变量_start、_finish、_endofstorage。
_start指向容器的头,_finish指向容器当中有效数据的尾,_endofstorage指向整个容器的尾。
默认成员函数
构造函数(无参构造)
vector()
:_start(nullptr)
,_finish(nullptr)
,_endofstorage(nullptr)
{}
我们可以在函数声明处给上缺省值,那么就不用在初始化列表中再初始化了:
class vector
{
private:
iterator _start = nullptr;
iterator _finish = nullptr;
iterator _endofstorage = nullptr;
};
构造函数(函数模板)
这是一个vector构造函数模板,它接收两个迭代器first和last作为参数,用来创建一个新vector,并拷贝first到last范围内的所有元素到这个新vector里。具体操作是遍历这个区间,逐个将元素添加到vector末尾。
template
vector(InputIterator first, InputIterator last)
{
while (first != last)
{
push_back(*first);
++first;
}
}
构造函数(带有默认参数)
size_t
定义了一个向量vector的构造函数,它接受两个参数:元素数量n和一个可选的默认值val。函数首先预留足够的容量来存储n个元素,然后通过一个循环,将val这个值添加到向量中 n次。
如果未提供val,则默认添加该类型默认值,如整数类型的0。这样实现了快速构造一个特定大小且元素具有相同值或默认值的向量对象。
vector(size_t n, const T& val = T())
{
reserve(n);
for (size_t i = 0; i
int
唯一不同在于第一个函数接受size_t n作为参数,而第二个函数接受int n,这种差异主要体现在参数类型的差别上,建议使用size_t更符合C++标准库容器的惯例,因为它是一种无符号类型,更适合表示容器的大小,能避免负数引发的错误。
vector(int n, const T& val = T())
{
reserve(n);
for (int i = 0; i 

