std::sort
не сделает недействительными итераторы для вектора. Шаблон сортировки использует оператор *
на итераторах для доступа и изменения содержимого вектора, а также изменения элемента вектора, хотя итератор для элемента, уже находящегося в векторе, не сделает недействительными никакие итераторы.
В итоге
- существующие итераторы не будут признаны недействительными
- однако элементы, на которые они указывают, могли быть изменены
В дополнение к поддержке стандарта, предоставленной Кириллом В. Лядвинским ( Сортирует ли вектор итераторы? ):
- 25/5 "Библиотека алгоритмов"
Если в разделе «Эффекты алгоритма» написано
что значение, указанное любым
итератор передан в качестве аргумента
модифицированный, то этот алгоритм имеет
дополнительное требование типа: тип
из этого аргумента должны удовлетворять
требования изменяемого итератора
(24,1).
- 24.1 / 4 «Требования к итераторам»
Помимо своей категории, форвард,
двунаправленный или произвольный доступ
итератор также может быть изменяемым или
постоянная в зависимости от того, является ли
результат выражения * я веду себя как
ссылка или как ссылка на
постоянная.