Я хотел бы реализовать оператор над вектором, который пропускает определенное значение. Это то, что я написал, с этой проблемой я столкнулся комментировал:Выполнение приращения пропущенного итератора
template<class MyVector>
struct VectorSkipConstIterator : MyVector::const_iterator {
using Base = typename MyVector::const_iterator;
using ValueType = typename MyVector::value_type;
VectorSkipConstIterator(const ValueType &skip) : Base(), skip_(skip){};
VectorSkipConstIterator(Base it_, const ValueType &skip)
: Base(it_), skip_(skip){};
VectorSkipConstIterator &operator++() {
do {
Base::operator++();
} while (/* have not reached the end */ && this->operator*() == skip_);
return *this;
}
private:
ValueType skip_;
};
Таким образом, проблема заключается в том, что оператор ++ должна остановиться где-нибудь (а именно, в конце), даже если последнее значение (s) в векторе необходимо пропустить. Как это можно достичь?
Обычно вы проверяете, находитесь ли вы в конце кода клиента, а не в итераторе. И наследование от итератора часто является плохим Idea ™, поскольку это может быть просто указатель. – TartanLlama