Надеюсь, что для производительности std::vector
не «стирается и воссоздается каждый раз, когда изменяется».
Вектор имеет capacity
, который может превышать его size
, что означает, что он может выделить больше памяти, чем реально используется. Когда вы push_back
, перераспределение произойдет только в том случае, если новый размер больше, чем старая емкость, и в этом случае , итераторы будут недействительными.
В вашем случае вам следует проверить значение capacity
сразу после создания экземпляра std::vector
. Вы увидите, что оно, без сомнения, больше 3, поэтому ни один из ваших вызовов push_back
не вызывает перераспределение, и все итераторы остаются действительными.
Также обратите внимание, что std::vector
предоставляет функцию-член reserve
, которая позволяет вам контролировать емкость вектора. Это действительно полезно, когда вы знаете, сколько элементов предполагается вставить, чтобы избежать скрытого перераспределения.