Se ha già assegnato un blocco di memoria, continuerà a utilizzarlo perché sarebbe inefficiente per liberare memoria e successivamente dovrà allocare più memoria.
Raccomando sempre di scrivere uno snippet di codice di test per testare questo genere di cose.
Per esempio, ho buttato questo insieme in 2 minuti per verificare che vi dicevo informazioni corrette:
#include <iostream>
#include <vector>
void printInfo(std::vector<char> &_vector)
{
std::cout << "Size: " << _vector.size() << std::endl;
std::cout << "Capacity: " << _vector.capacity() << std::endl;
std::cout << std::endl;
}
int main()
{
int numbElems = 10;
std::vector<char> myvector;
std::cout << "Nothing entered" << std::endl;
printInfo(myvector);
for (int i = 0; i < 10; i++) {
for (int c = 0; c < numbElems; c++) {
myvector.push_back(i);
}
std::cout << "Pushed " << numbElems << std::endl;
printInfo(myvector);
}
for (int i = 0; i < 5; i++) {
for (int c = 0; c < numbElems; c++) {
myvector.pop_back();
}
std::cout << "Popped " << numbElems << std::endl;
printInfo(myvector);
}
myvector.erase(myvector.begin(), myvector.end());
printInfo(myvector);
std::cout << "max_size: " << myvector.max_size() << std::endl;
return 0;
}
Se compilate ed eseguite vedrete Capacità non scende in termini di dimensioni. Anche dopo la cancellazione, o alcuni elementi vengono rimossi.
Su linux è possibile utilizzare less
per scorrere l'output.
fonte
2014-11-12 05:38:34
Utilizzare 'shrink_to_fit' se è necessario" garantire "questo (si noti che * può * tecnicamente essere ignorato, ma non credo che nulla lo sia). – chris
La risposta breve è no - 'erase() 'non riduce' capacity() '. –
E nemmeno 'clear()'. – bialpio