Может ли 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
C ++: может ли std :: evect radize () изменить емкость вектора или вызвать перераспределение памяти, если изменение разм ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение