我是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
}
任何人都可以告诉哪种方法最好吗?这里有什么问题???
答案 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`)
};