Задать вопрос
@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 - не константный вектор?
  • Вопрос задан
  • 282 просмотра
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++: Профессия + специализация + нейросети
    12 месяцев
    Далее
  • Skillbox
    Разработчик на C++
    7 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
Решения вопроса 1
@MiiNiPaa
А с чего вы взяли, что end возвращает const_iterator? Если бы он возвращал константный итератор, то типы в ошибке были бы 'const AnotherType' and 'const AnotherType'

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

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

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