Здравствуйте! Я написал свой класс-контейнер. И теперь мне нужно написать класс iterator, чтобы мой контейнер смог взаимодействовать с алгоритмами стандартной библиотеки. Написал класс:
class Iterator {
public:
Iterator(T *first) {
current = first;
}
T &operator+(int n) {
return *(current + n);
}
T &operator-(int n) {
return *(current - n);
}
T &operator++(int) {
return *current++;
}
T &operator--(int) {
return *current--;
}
T &operator++() {
return *++current;
}
T &operator--() {
return *--current;
}
bool operator==(const Iterator &it) {
return current == it.current;
}
bool operator!=(const Iterator &it) {
return current != it.current;
}
T &operator*() {
return *current;
}
private:
T *current;
};
Код в main:
Array<int> arr;
Array<int> arr2;
for (int i(160); i >= 0; i -= 5)
{
arr.append(i);
}
for (int i(0); i < 180; i += 5)
{
arr2.append(i);
}
sort(arr.begin(), arr.end());
В итоге получаю несколько ошибок при сборке:
error C2679: бинарный "-": не найден оператор, принимающий правый операнд типа "Array::Iterator" (или приемлемое преобразование отсутствует)
error C2780: void std::_Sort(_RanIt,_RanIt,_Diff,_Pr): требует аргументов: 4, имеется: 3
Не знаю, что у вас неправильно в append, но итератор реализован неправильно. Бинарные операторы + и - должны возвращать новый итератор, а не объект типа Т, аналогично с операторами ++ и --. Скорее всего, должно быть примерно так :
class Iterator {
public:
explicit Iterator(T *first): current(first) {
}
Iterator operator + (int n) const{
return Iterator(current + n);
}
Iterator operator++(int) {
Iterator tmp(current++);
return tmp;
}
Iterator& operator++() {
++current
return *this;
}
Iterator operator - (int n) const{
return Iterator(current - n);
}
Iterator operator--(int) {
Iterator tmp(current--);
return tmp;
}
Iterator& operator--() {
--current
return *this;
}
bool operator==(const Iterator &it) const{
return current == it.current;
}
bool operator!=(const Iterator &it) const{
return !(*this == it);
}
T &operator*() {
return *current;
}
const T &operator*() const{
return *current;
}
private:
T *current;
};
P.S. И про const не забывайте.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
История такаяВ программе понадобился урезанный редактор для изображений, в котором есть ползунки, меняющие значение для гаммы, контраста...