c++新特性:让基于范围的for循环支持自定义类型

本文介绍了如何使C++的范围for循环支持自定义类型,包括自定义迭代器类型,重载解引用和不等于运算符,以及自定义Range类以实现size(), begin(), end()接口。通过get_adjust_count()确定循环次数,并处理异常情况。最后展示了支持单参数、双参数及带浮点数步长的三参数循环的实现。" 129108416,9863761,STC单片机串口调试:scanf与printf实践,"['STC单片机', '嵌入式硬件', '串口通信']
摘要由CSDN通过智能技术生成

来自: 深入应用c++代码优化与工程级应用

一:自定义迭代器类型,

重载运算符*(解引用), !=(用于循环结束判断),

定义3个成员变量, 用cursor来判断循环结束而不是value=it.value的原因是可能循环浮点数时有误差

template<typename T>
class Iterator
{
public:
    int cursor; //表示循环到第几下
    T step;     //表示步长
    T value;    //表示迭代器表示的值, 如begin为初始3, end为8

    Iterator(int cursor_start, T begin_val, T step_val) :
            cursor(cursor_start), value(begin_val), step(step_val)
    {
        if (cursor != 0)//对于begin, cursor为0, 即value不变
        {
            //对于end, cursor为最大循环次数,value=value+步长*次数
            value += (step * cursor);
        }
    }

    T operator*() const //指针解引用
    {
        return value;
    }


    //用cursor表示迭代器是否相等
    bool operator!=(const Iterator &it) const
    {
        return cursor != it.cursor ;
    }

    Iterator &operator++()
    {
        value += step; //值+步长
        ++cursor;  //cursor前移
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值