Шрифт:
Чтобы понять смысл происходящего, необходимо запомнить следующее: Алгоритм remove «по настоящему» ничего не удаляет, потому что не может. На всякий случай повторю: …потому что не может!
Алгоритм
Итак, теперь вы знаете, чего алгоритм
В общих чертах
В рассмотренном выше примере вектор
Предположим, возвращаемое значение
После вызова вектор
Вопросительными знаками отмечены значения элементов, «концептуально» удаленных из
Раз «оставшиеся» элементы v находятся между
Как видите, два значения «99», ранее существовавших в
На первый взгляд поведение remove выглядит довольно странно, но оно является прямым следствием принципа работы алгоритма. Во внутренней реализации
Алгоритм
1. Алгоритм
2. Алгоритм определяет, что элемент
3. Значение
4. Элемент
5. Элемент
6. Аналогичным образом анализируются элементы
7. Алгоритм возвращает итератор для элемента, следующего за последним «оставшимся». В данном примере это элемент
Перемещения элементов в векторе
Как объясняется в совете 33, факт перезаписи некоторых удаляемых значений имеет важные последствия в том случае, если эти значения являются указателями. Но в контексте данного совета достаточно понимать, что