Задать вопрос
@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++
    9 месяцев
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Учебная программа “Разработка программного обеспечения”
    30 месяцев
    Далее
Решения вопроса 1
@MiiNiPaa
А с чего вы взяли, что end возвращает const_iterator? Если бы он возвращал константный итератор, то типы в ошибке были бы 'const AnotherType' and 'const AnotherType'

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

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

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