Чтобы понять это, вам нужно понять, как работает вектор.
Хорошая ментальная модель:
class vector
{
T *data;. // Pointer to the first element
size_t size; // Number of elements in use
size_t capacity; // Number of elements available
};
Всякий раз, когда добавляется элемент:
- элемент конструируется
- размер увеличивается
Когда не хватает емкости, мы должны увеличить данные.Короче говоря, если вы посмотрите на код push_back, он будет выглядеть так:
T& push_back(T const& t)
{
if (size == capacity)
grow();
constructAtEnd(t);
++ size;
return back();
}
На практике это немного сложнее из-за гарантий исключений.Однако, учитывая вышесказанное, вы сможете проверить реализацию вектора и распознать, что происходит, для всех методов.