Являются ли итераторы карты/мультикарты взаимозаменяемыми?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Являются ли итераторы карты/мультикарты взаимозаменяемыми?

Сообщение Anonymous »

В приведенном ниже коде я определяю карту и мультикарту. Затем я определяю четыре итератора, присваивая им значения из этих контейнеров:

Код: Выделить всё

std::map m;
std::multimap mm;

std::map::iterator miter1 = m.begin();
std::multimap::iterator miter2 = m.begin();
std::multimap::iterator mmiter1 = mm.begin();
std::map::iterator mmiter2 = mm.begin();
miter2 и mmiter2 определены неправильно: там, где ожидается итератор из карты, определен итератор для multimap, и наоборот. Этот код компилируется (я не нашел ни одного компилятора, выдающего ошибки), и отчасти это имеет смысл, поскольку для обоих контейнеров типы value_type и iterator определяются совершенно одинаково:

Код: Выделить всё

value_type  std::pair
iterator    LegacyBidirectionalIterator and ConstexprIterator(since C++26) to value_type
То же самое справедливо и для неупорядоченных версий контейнеров.
Я столкнулся с этой проблемой при рефакторинге устаревшего кода, и теперь мне интересно, можно ли считать этот код ошибочным? И последующие вопросы:
  • Гарантируется ли компиляция с учетом известных текущих стандартов?
  • Есть ли вероятность того, что этот код позже станет недействительным или текущие стандарты явно считают его действительным (поэтому маловероятно, что он будет изменен в более поздних стандартах)?
  • Есть ли какое-либо практическое применение от этого взаимозаменяемость?


Подробнее здесь: https://stackoverflow.com/questions/797 ... changeable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»