una pseudocodigo pseint posiciones numero lista limpiar eliminar elementos elemento datos como arreglo c++ vector size std capacity

c++ - pseudocodigo - ¿Limpiar un vector afecta su capacidad?



eliminar posiciones de un arreglo en c (4)

I instancia un std::vector foo(1000) .

foo.size() ahora es 1000 y foo.capacity() también es 1000.

Si foo.clear() el vector con foo.clear() , el size() ahora es 0, pero ¿cuál es la capacity() ? ¿El estándar dice algo al respecto?


El estándar no dice nada sobre el efecto de la capacity clear .


No, claro no afecta su capacidad (), sigue siendo el mismo incluso si lo haces claro. Si desea reducir el vector para que quepa, puede usar el siguiente truco después de llamar a clear: foo.swap (vector (foo));


No, no es así. La capacidad de un vector nunca disminuye. Esto no es un requisito del estándar, pero lo es tanto en implementaciones de bibliotecas estándar de VC ++ como de g ++. Para configurar la capacidad lo suficiente como para ajustarse al tamaño, utiliza el famoso truco de intercambio

vector<T>().swap(foo);

En el estándar C ++ 11, puede hacerlo de manera más explícita:

foo.shrink_to_fit();


Para borrar un vector y consumir la menor capacidad posible, use el truco de intercambio:

std::vector<T>().swap(foo);

Esto crea un vector vacío, intercambia sus elementos internos con foo y luego destruye el vector temporal, eliminando los elementos que una vez pertenecieron a foo y dejando foo como si hubiera sido creado recientemente.