string模拟实现迭代器

个人主页:Jason_from_China-优快云博客

所属栏目:C++系统性学习_Jason_from_China的博客-优快云博客

所属栏目:C++知识点的补充_Jason_from_China的博客-优快云博客

 string模拟实现迭代器

迭代器的实现

主要实现的两种迭代器

  1. 这里我们实现迭代器我们主要实现的是begin(),end(),其他都差不多
  2. 注意实现的时候,const和非const是有区别的
    iterator end();
    const_iterator end();//const采取const_iterator的方式来区分非const
//.h文件,放到类里面

//迭代器的实现
//iterator通常是一个类型别名或者一个具体的类类型的名称,它被用来表示具有迭代器功能的对象。在 C++ 标准库中,迭代器是一种用于遍历容器中元素的对象,它提供了一些特定的操作,如解引用、递增、递减、比较等。
//iterator通常是一个类型别名或类类型,用于表示可以遍历特定容器中元素的迭代器对象。它定义了迭代器的行为和操作,如解引用(获取指向的元素)、递增(移动到下一个元素)、比较等。
// 所以在我们还没有学到容器的情况下我们可以直接对iterator进行封装,从而变相实现迭代器


//typedef char* iterator;//iterator的第一种封装方式
using iterator = char*;//iterator第二种封装方式是
using const_iterator =const char*;
iterator begin();
const_iterator begin()const;//这里后面的const也是需要加上的,因为在istream类里面,是加上的,这里不加上会报错
iterator end();
const_iterator end()const;//这里后面的const也是需要加上的,因为在istream类里面,是加上的,这里不加上会报错
//.cpp文件,string的实现文件

//这里是类里面定义的,所以是需要突破类域的
string::iterator string::begin()
{
	return _str;
}
string::iterator string::end()
{
	//end指向的是\0
	return _str + _size;
}
string::const_iterator string::begin()const
{
	return _str;
}
string::const_iterator string::end()const
{
	//end指向的是\0
	return _str + _size;
}

头文件代码解释

  1. 重命名的方式有两种,一种是typedef,一种是using,我们采取using的方式
  2. using iterator = char*;,首先我们把char*类型重命名为iterator
  3. 我们把const char*;,类型重命名为const_iterator 
  4. end采取相同的逻辑

实现文件的解释

  1. 这里实现文件比较好理解,begin(),返回的首元素地址
  2. end(),返回的是最后一个元素的后一个位置的地址
  3. const就是修饰后,只能读不能写的元素,目的是防止产生权限放大和缩小的问题
  4. 也就是,当创建一个const修饰的string的类的时候,如果我们调用迭代器,并且此时没有const类型进行匹配,那么我创建的类是不可修改的,只是可读的,如果我调用迭代器,迭代器是可以修改,可以读的,此时就产生了权限放大的问题
    C++ const成员函数-优快云博客

注意事项:

  1. 实现迭代器之后我们不需要实现语法糖范围for了,因为范围for的底层是迭代器
  2. 这一点了解就可以

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值