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) && (iirst. Shouldn't truthfully get called if mode
        // isn't >0
        if (mode <= 0)
            return -1;

        ret = reg;
        reg++;
        mode--;

        if (mode == 0)
        {
            // skip forward
            reg += skip;
            skip = 0;

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

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

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

++it

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

*it

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

--it

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

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

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

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

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

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

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...