2009-03-03 17 views
7

Ich bin in einer Situation, in der ich eine c-style-Funktion verwenden muss, die die kopierten len zurückgibt. Ich entschied, dass ich die Größe auf max ändern sollte, dann die Größe auf die zurückgegebene Länge expand size of vector passed as memoryVektorfüllwert bei Größenänderung deaktivieren? C++

Ich weiß Größe ändern legt den Wert auf fillValue (immer 0?). Also wird es eine sinnlose Initialisierung (hoffentlich weniger als ein mb jedes Mal) 60 mal jede Sekunde geben. Gibt es eine Möglichkeit, die Initialisierung bei der Größenänderung zu deaktivieren?

+0

Entschuldigung, ich verstehe Ihr Problem nicht - könnten Sie einen Beispielcode posten? –

Antwort

11

Grundsätzlich keine. Elemente im Vektor werden standardmäßig mit einer Größenänderung konstruiert (für eine ganze Zahl ergibt dies 0).

Angenommen, Sie verwenden reserve(), um sicherzustellen, dass resize() keinen Speicher zuweist, würde ich mir darüber keine Gedanken machen, es sei denn, es erweist sich später als Leistungsproblem.

Wenn Sie besorgt sind, möchten Sie vielleicht nur ein reguläres Array verwenden und die Elementanzahl in einer separaten Variablen speichern. Dadurch erhalten Sie die beste Leistung.

Update:

John fragte:

der Konstruktor Ist wirklich garantiert, dass der Speicher auf Null? Ich dachte, dass nicht definiert war?

Ja und nein. Die primitiven Typen (int, bool, float usw.) haben Standardkonstruktoren, die sie auf Null initialisieren. Im Gegensatz zu regulären Klassen oder Strukturen ruft der Compiler sie jedoch nicht automatisch auf.

Z. B

int a;   // uninitialized 
int b = int(); // initialized to 0 

Da vector :: resize die letztere Form verwendet, wenn Elemente hinzufügen, die Sie garantiert werden, dass die erzeugten Elemente korrekt auf Null initialisiert werden. Dies gilt für alle STL-Sammlungen, die implizit Elemente erstellen.

+0

Ist der Konstruktor wirklich garantiert, diesen Speicher auf Null zu setzen? Ich dachte das wäre undefiniert? –

+0

Yeap, ich habe ein Update hinzugefügt, das erklärt warum –

Verwandte Themen