Eigentlich funktioniert der Standard festlegen, was passieren soll:
Dies ist von vector
, aber das Thema ist das gleiche für alle Behälter (list
, deque
, etc ...)
23,2 .4.2 Vektor capacity [lib.vector.capacity]
void resize(size_type sz, T c = T());
6) Effekte:
if (sz > size())
insert(end(), sz-size(), c);
else if (sz < size())
erase(begin()+sz, end());
else
; //do nothing
Das heißt: weniger Wenn die Größe ist als die Anzahl der Elemente zu resize
angegeben, werden diese Elemente aus dem Container gelöscht werden. Bezüglich capacity()
hängt das davon ab, was erase()
tut.
ich es in der Norm nicht finden können, aber ich bin mir ziemlich sicher, dass clear()
sein definiert:
void clear()
{
erase(begin(), end());
}
Daher sind die Auswirkungen clear()
auf capacity()
hat sich auch auf die Auswirkungen gebunden erase()
auf sie. Nach dem Standard:
23.2.4.3 vektor modifiers [lib.vector.Modifikatoren]
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
4) Komplexität: Der Destruktor von T die Anzahl der Male gleich der Anzahl der gelöschten Elemente genannt ....
Dies bedeutet, dass die Elemente wird zerstört, aber die Erinnerung bleibt erhalten. erase()
hat keinen Einfluss auf die Kapazität, daher haben resize()
und clear()
auch keine Wirkung.
Die Art, wie ich es lese, fragt er nach den Auswirkungen auf die Speichernutzung - er fragt speziell, wie sich die Größenänderung auf die Kapazität auswirkt. Der Standard spezifiziert das Ergebnis in diesem Fall nicht, aber der einzige Grund, nach dem ich mir fragen kann, ist der Wunsch, ungenutzten Speicher freizugeben. Der Austausch mit temporärem Trick ist der idiomatische Weg, dies zu erreichen. – mattnewport
Der Standard gibt das Ergebnis an, indem für diese Operationen keine Verringerung der Kapazität() angegeben wird. Daher kann es nicht abnehmen. – MSalters
Es gibt einige Umgebungen, in denen es verboten ist, Speicher nach einer anfänglichen "Aufbau" -Phase zuzuweisen oder freizugeben. Vektoren sind in dieser Umgebung verwendbar, solange man sicher sein kann, dass sie nicht versuchen, während Operationen Speicher zuzuweisen oder freizugeben. Diese Frage ist also relevant in dieser Situation (die mich hierher gebracht hat). – meowsqueak