如何为我在C ++中创建的对象构建迭代器

时间:2015-01-24 17:50:24

标签: c++ object iterator

我想构建一个简单的迭代器,例如 - 在类中:“myVector”:

#include <iostream>
using namespace std;
#define maxSize 10

class myVector {
private:
    int *arr;
    int sp;
public:
    myVector() {
        arr = new int[maxSize];
        sp = 0;
    }
    bool add(int num) {
        if (sp==maxSize) return 0;
        arr[sp] = num;
        sp++;
        return 1;
    }
};
示例中的

- 我构建了一个生成myVector类型对象的类。现在我想构建一个带有operator ++的迭代器,以便在向量的私有数组上运行。

非常感谢

2 个答案:

答案 0 :(得分:2)

您必须支持std::iterator_traits<YourIterator>。简单的方法是使用适当的参数继承std::iterator<?>

这样做你必须决定一个迭代器类别。这决定了您保证支持的内容,包括操作员明智和行为明智。

现在,boost有一些辅助类型,使编写迭代器更容易。考虑使用boost。但是没有它们就不可能写出基本的迭代器。

在上面的特定情况中,指针是您问题的有效迭代器。并且比上述任一选项更容易。将此作为您的第一次迭代:KISS。请注意,指针对免费提供std::iterator_traits支持。

要使对象可迭代(并支持for(auto&&x:c)语法),请在与生成迭代器的类相同的命名空间中编写一个空闲的beginend函数,或者添加{{ 1}}和begin()方法也是如此。我倾向于添加end()size以及emptyfront,因为我觉得它们很有用。举个例子:

back

答案 1 :(得分:1)

你需要写这样的东西。

class myVector {
  class myIterator {
    private:
        int *position; //operator ++ increment this position
    public:
        myIterator operator++(){ 
           //increment position here 
        }
        int& operator*(){ 
          //return *pos 
        }
        bool operator==(const myIterator &it)const {
           //check that pos and it.pos are the same
        }
   };
};

这可以工作,但不会是一个符合STL的迭代器,因为你还需要添加几个typedef,例如你的迭代器的类型(在你的情况下你有一个输入迭代器)。如果你想要一个STL迭代器,最简单的方法就是使用boost facade iterator