Может ли 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++
Программы на C++. Форум разработчиков
1737739015
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>
В документации говорится, что емкость вектора никогда не уменьшается при изменении размера до меньшего размера ». Тем не менее, в моем случае, некоторые изменения будут увеличиваться, а некоторые уменьшат размер вектора (всегда оставаясь в пределах емкости).
Большое спасибо за вашу помощь!
Подробнее здесь: [url]https://stackoverflow.com/questions/79385135/c-can-stdvector-resize-change-the-vector-capacity-or-cause-memory-realloc[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия