ДавайтеВозвратить память, выделенную резервом()
std::vector myVec;
myVec.reserve(10);
Если бы я выделил только 5 элементов, как я могу восстановить память, выделенная для других 5 элементов?
ДавайтеВозвратить память, выделенную резервом()
std::vector myVec;
myVec.reserve(10);
Если бы я выделил только 5 элементов, как я могу восстановить память, выделенная для других 5 элементов?
std::vector<int> v(myVec);
myVec.swap(v);
Это будет инициализировать вектор с таким же количеством элементов, однако у него должно быть достаточно памяти для их хранения. Затем он заменяется оригиналом, это должно заменить хранилище данных (используя дешевый обмен указателями), и массив с большим размером будет уничтожен.
или в C++ 11 вы можете использовать std::vector::shrink_to_fit
myVec.shrink_to_fit();
http://en.cppreference.com/w/cpp/container/vector/shrink_to_fit
Если у вас есть это, это намного предпочтительнее, хотя он не является связывание (в зависимости от реализации, как много, если какой-либо удаляется), поэтому, если это действительно большой тип, убедитесь, что вы прокомментируете свой код, чтобы убедиться, что он их удаляет.
EDIT: а Дэвид предложил есть сокращение для первого метода, если у вас нет C++ 11, который:
std::vector<int>(myVec).swap(myVec);
Это имеет преимущество мгновенно разрушив временное в конце выражения ,
Просто имейте в виду, что 'shrink_to_fit' является необязательным запросом. –
, а также этот вектор может оптимизировать распределение путем предварительного распределения некоторых элементов – PlasmaHH
+1, сокращением, которое не требует создания новой переменной, будет: 'std :: vector (myVec) .swap (myVec);', который создает * временный *, свопит его и сразу же уничтожает. –