0

我是 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  
     }

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

4

2 回答 2

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`)
};
于 2013-08-17T16:02:04.890 回答
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)
        // ...
}
于 2013-08-17T16:00:58.090 回答