Java Iterator等效于C? (带代码)

前端之家收集整理的这篇文章主要介绍了Java Iterator等效于C? (带代码)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

大家好.一位朋友为我编写了一些Java代码,我很容易将其转换为C,但我对C中的Java迭代器的等价物非常好奇.这是代码,我很可能希望将数据返回到向量中.任何帮助表示赞赏

public class RLEIterator
extends RegionIterator
{
    public int reg = 0;
    public int mode = 0;
    public int skip = 0;
        // mode is the number of IDs that are valid still (count down)
        // skip is used after we run out of mode IDs,and move forward
        //   The goal is,to always have a valid 'hasNext' state,after
        // an ID is read via 'next'. Thus,the initial search,and then
        // the reading forward if mode == 0,after the ID is found.
    public int i;

    public RLEIterator()
    {
        // Need to set up the skip of an initial part,so we can
        // correctly handle there not being anything,despite there
        // being data encoded.

        int comp;
        i = 0;

        while ((mode == 0) && (i

再一次,任何有关如何适应C中单个函数(如果可能)的方案的帮助都会很棒.谢谢!

最佳答案
您对C迭代器有多熟悉?它们的设计看起来非常像指针,因此给定一个迭代器:

++it

增加迭代器(跳到下一个元素)

*it

将取消引用迭代器(返回它指向的元素的引用)

--it

将(如果它被定义)减少迭代器(返回上一个元素)

通常,C迭代器对它们所操作的容器一无所知.特别是,检查序列中是否还有更多元素的方法不是在迭代器上调用HasNext,而是将它与您知道指向序列末尾的迭代器进行比较. (或者,严格地说,将它与指向序列末尾的元素进行比较.)

除此之外,迭代器需要定义一些typedef和其他辅助内容,以帮助编译器对迭代器的功能进行分类和理解.

定义迭代器的最简单方法是使用Boost.Iterator库的iterator_facade类,它实现了几乎所有的管道.该库具有出色的文档,包括描述如何定义自己的迭代器类型的教程.

如果使用Boost是一个选项,你一定要去做.否则,标准库有std :: iterator也有一点帮助(但是,值得注意的是,不是必需的 – 迭代器可以完全有效地定义而不从这个类派生)

对不起,我没有写完一个完整的例子,但我现在有点急. (而且,如果你能够使用Boost,那么从头开始定义一个示例迭代器就会浪费时间).希望以上内容足以让您入门.

猜你在找的Java相关文章