Heim >Backend-Entwicklung >C++ >Wann übertrifft „std::vector' Raw-Arrays in C?
Vektor vs. Arrays: Ein Leistungsproblem
In C wurde von der Verwendung von Arrays zugunsten von std::vectors abgeraten. Das Ausmaß der Leistungsunterschiede wurde jedoch oft in Frage gestellt.
Vermeidung von C-Arrays
Aktuelle Richtlinien schlagen vor, neu zugewiesene C-Arrays zu vermeiden, da diese eine manuelle Nachverfolgung erfordern Streichung. Darüber hinaus wird von der Verwendung von Arrays auf dem Stapel abgeraten, da die Bereichsprüfung fehlt und Größeninformationen während der Zeigerkonvertierung verloren gehen. In solchen Fällen wird std::array empfohlen, das Größenfunktionen und Iteratoren bereitstellt.
std::Vector vs. Native Arrays
Empirische Ergebnisse zeigen, dass grundlegende Indizierung, Dereferenzierungs- und Inkrementierungsoperationen an Vektoren funktionieren genauso wie ihre entsprechenden Array-/Zeiger-Gegenstücke. Die Analyse des Assemblercodes bestätigt diese Äquivalenz (siehe Codeausschnitt unten).
int pointer_index(S &s) { return s.p[3]; } // Analogous to vector indexing int vector_index(S &s) { return s.v[3]; } // Same assembly code
int pointer_deref(S &s) { return *s.p; } // Analogous to iterator dereferencing int iterator_deref(S &s) { return *s.i; } // Identical assembly code
void pointer_increment(S &s) { ++s.p; } // Analogous to iterator increment void iterator_increment(S &s) { ++s.i; } // Same assembly code
Ausnahme: Leistungsvorteil neu zugewiesener Arrays
Eins Eine Ausnahme von der Leistungsäquivalenz bilden neu zugewiesene Arrays, die Nicht-Klassenobjekte oder Klassen ohne benutzerdefinierte Konstruktoren enthalten. In diesem Fall können neu zugewiesene Arrays einen Vorteil gegenüber std::vectors bieten, da std::vectors Elemente bei der Erstellung auf Standardwerte (z. B. 0 für int) initialisieren.
Das obige ist der detaillierte Inhalt vonWann übertrifft „std::vector' Raw-Arrays in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!