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

2024-05-13 1024阅读

【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。

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

_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 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]