A std::vector
- это , а не - разреженный контейнер в том смысле, что вызов data.resize(3)
позволяет назначить 3 элемента вектору с любым индексом по вашему выбору. Это не так.
Вы можете назначать только индексы 0, 1 и 2. Поведение при попытке доступа к data[5]
равно undefined .
Похоже, что он работает в этом случае из-за того, что ваша библиотека времени выполнения C ++, возможно, выделяет пространство для большего количества элементов, чем 3, как полезная оптимизация для устранения фрагментации памяти.Возможно, вы могли бы сказать, глядя на емкость вектора.Но никогда не полагается на емкость, являющуюся верхней границей индекса, к которому вы можете получить доступ.