设为首页 加入收藏

TOP

二、C++迭代器的两种实现方式 (Range for和C#、Java中的foreach)(二)
2015-07-24 05:51:47 来源: 作者: 【 】 浏览:10
Tags:实现 方式 Range for Java foreach
: CSharpCollection &outer; //外部类 int index = 0; //下标 Enumerator (CSharpCollection &o) : outer(o){ } bool MoveNext() override { index++; if (index <= 10) return true; delete this; return false; } void Reset() override { index = 0; } std::string &Current() override { return outer.str[index]; } ~Enumerator (){ std::cout << "Enumerator 被析构" << std::endl; } }; public: std::string str[10] {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"}; IEnumerator & GetEnumerator() override{ return *new Enumerator(*this); } }; 需要注意的是,凡是体现多态性的函数,返回值必须为引用或者指针,且不得为栈中的临时变量,因此我们调用完GetEnumerator()后,要将生成的迭代器删除,删除的代码写在了MoveNext()内,当游标不可移动的时候,迭代器被删除。

以后就可以用自己的foreach宏定义来遍历元素了:
    std::string a;
    CSharpCollection csc;
    IEnumerable
  
   & refcsc = csc;
    foreach (a , refcsc ){
        std::cout << a << std::endl;
    }
  

上面代码的第三行意在说明,如果一个类中继承了IEnumerable类,它一定是可迭代的,可以调用它的Reset()、MoveNext()、Current(),也可以用我们刚刚写的foreach来进行遍历。
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ2112Optimal Milking(二分+fl.. 下一篇LeetCode――Sum Root to Leaf Nu..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: