Следующий код печатает числа от 0 до 9 с пользовательскими итераторами. Я компилирую с g++ -std=c++11 -o test test.cpp
C++ custom iterator constructor
#include <iostream>
class some_class;
class some_class_iterator : public std::iterator<std::forward_iterator_tag, int>{ private:
friend class some_class;
int pointed;
some_class_iterator(int _pointed): pointed(_pointed){
std::cout << "over here" << std::endl;
}
public:
int poitned;
int operator*(){
return pointed;
}
const some_class_iterator& operator++(){
pointed++;
return *this;
}
bool operator!=(const some_class_iterator& other) const {
return this->pointed != other.pointed;
}
};
class some_class{
public:
typedef some_class_iterator iterator;
iterator begin(){
return some_class_iterator(0);
}
iterator end(){
return some_class_iterator(10);
}
};
int main(){
some_class a;
for (some_class::iterator i = a.begin(); i != a.end(); ++i) std::cout << *i << std::endl;
}
Однако выход не то, что я ожидал, чтобы быть over here
напечатан несколько раз. Например фактический выход:
over here
over here
0
over here
1
over here
2
over here
3
over here
4
over here
5
over here
6
over here
7
over here
8
over here
9
over here
Так кто вызывает вызов конструктора здесь?
Моя фактическая проблема заключается в итераторе дерева бинарного поиска, где в конструкторе я создаю обход FIFO с печатаемыми узлами в зависимости от (in, pre, post), поэтому вызов конструктора несколько раз является дорогостоящим.
* High five! * ... и некоторый текст наполнителя. –
К сожалению, это был вопрос с ошибкой ... –
@k_kaz Нет, у вас есть некоторое вдохновение для будущих методов отладки, поэтому в конце концов это своего рода победа. –