@Free_ze
Пишу комментарии в комментарии, а не в ответы

Почему vector::end() возвращает const_iterator?

class SomeType{
    std::vector<AnotherType> _items;
public:
    void removeItem(AnotherType *pItem);
};
void SomeType::removeItem(AnotherType *pItem) {
    auto found = std::find(_items.begin(), _items.end(), *pItem); // error
    //....
}


GCC ругается на строчку с поиском:
C:\Qt\Tools\mingw492_32\i686-w64-mingw32\include\c++\bits\predefined_ops.h:191: ошибка: no match for 'operator==' (operand types are 'AnotherType' and 'const AnotherType')
  { return *__it == _M_value; }
                 ^


Почему так разрешается перегрузка end, если _items - не константный вектор?
  • Вопрос задан
  • 278 просмотров
Решения вопроса 1
@MiiNiPaa
А с чего вы взяли, что end возвращает const_iterator? Если бы он возвращал константный итератор, то типы в ошибке были бы 'const AnotherType' and 'const AnotherType'

Поправьте оператор сравнения, чтобы он брал объекты по константной ссылке.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы