C ++: может ли std :: evect radize () изменить емкость вектора или вызвать перераспределение памяти, если изменение размC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 C ++: может ли std :: evect radize () изменить емкость вектора или вызвать перераспределение памяти, если изменение разм

Сообщение Anonymous »

Может ли std::vector resize() изменить емкость вектора() или вызвать перераспределение памяти, если изменение размера всегда находится в пределах начальной емкости?
Вот мой вариант использования:
#include
const uint64_t maxSize = /* some large size */;
// SimpleCStruct is a fixed size C-struct containing as members basic C types and other
// fixed size C-structs
std::vector v;
v.reserve(maxSize);
SimpleCStruct * const dataPtr = v.data(); // has to be saved before the loop below begins
for( /* very large number of iterations*/ )
{
const uint64_t numberOfElementsWritten = C_function_writes_data_to(dataPtr);
v.resize(numberOfElementsWritten);
// numberOfElementsWritten < maxSize (always)
// 'v' is serialized to disk here
}
< /code>
v.data () обеспечивает прямой доступ к лежанию смежного хранилища, и поэтому вызов функции уровня C, как ожидается, будет работать правильно. < /p>
В документации говорится, что емкость вектора никогда не уменьшается при изменении размера до меньшего размера ». Тем не менее, в моем случае, некоторые изменения будут увеличиваться, а некоторые уменьшат размер вектора (всегда оставаясь в пределах емкости).
Большое спасибо за вашу помощь!

Подробнее здесь: https://stackoverflow.com/questions/793 ... ry-realloc
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»