Heim >Backend-Entwicklung >C++ >Wann übertrifft „std::vector' Raw-Arrays in C?

Wann übertrifft „std::vector' Raw-Arrays in C?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-20 10:38:12727Durchsuche

When Does `std::vector` Outperform 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn