【C++初阶】第十站:vector 中通用函数的模拟实现

慈云数据 6个月前 (05-30) 技术支持 40 0

目录

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 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon