Страницы

Поиск по вопросам

воскресенье, 5 января 2020 г.

Можно ли сравнивать итераторы одного типа из разных контейнеров?

#cpp


К примеру у нас есть:

std::list a;
std::list b;

auto iter0 = a.begin();
auto iter1 = b.begin();

if(iter0 != iter1) {
   ...
}


Понятно, что итераторы никогда не будут равны для разных контейнеров, но мне интересно,
что говорит по этому стандард? Это неопределенное поведение, или нет?
    


Ответы

Ответ 1



Да, это неопределенное поведение. Сравнение итераторов из разных контейнеров не допускается. Оператор == требует, чтобы оба итератора итерировали по одной и той же последовательности [iterator.concept.forward]p2 Что интересно, стандарт C++14 разрешил сравнение между собой однотипных value-инициализированных итераторов std::vector::iterator a{}, b{}; assert(a == b); но сравнение таких итераторов с другими "нормальными" итераторами по-прежнему не допускается.

Комментариев нет:

Отправить комментарий