在我自己的类c ++ 11中创建迭代器

时间:2013-08-17 15:54:51

标签: loops c++11 iterator

我是c ++编程的新手,我需要创建迭代器,但我遇到循环问题(在c ++ 11中),因为它无法识别元素,我解释说:

class myclass{
    std::string str;
    myclass();
    std::iterator<(what do i have to put here?), char, diffptr_t, char*, char&> begin(){
       return str.begin();
    }
}

这是读取类的方法:

 void func(myclass& m){
     for(char a: m){ //Here's the problem, i don't know why it doesn't work
         //do function  
     }

任何人都可以告诉哪种方法最好吗?这里有什么问题???

2 个答案:

答案 0 :(得分:1)

至少如果我理解你的问题,你需要的东西是:

class myclass { 
    std::string str;
public:
    std::string::iterator begin() { return str.begin(); }
    std::string::iterator end() { return str.end(); }
};

void func(myclass &m) { 
    for (auto a : m)
        // ...
}

答案 1 :(得分:1)

如果您只是从std::string返回迭代器,那么您应该可以执行以下操作:

auto begin() -> decltype(str.begin())
{
    return str.begin();
}

一个简单的迭代器确实非常简单。它需要能够与其自身类型的另一个迭代器进行比较,并且至少需要前缀增量运算符(对于基于范围的for循环才能工作),当然还需要取消引用操作。就是这样。

在你的情况下,它可能类似于

class iterator
{
    friend myclass;  // So that only `myclass` can construct this

public:
    bool operator==(const iterator& other) const
    {
        // Implement comparison
    }

    iterator& operator++()
    {
        // Increment
        return *this;
    }

    char& operator*() const
    {
        // Return a reference to the "current" character
    }

    friend bool operator!=(const iterator& i1, const iterator& i2)
    {
        return !(i1 == i2);
    }

private:
    iterator(...) { ... }

    // Put the actual iterator here (e.g. `std::string::iterator`)
};