„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie lade ich eine Datei effizient in einen „std::vector“?

Wie lade ich eine Datei effizient in einen „std::vector“?

Veröffentlicht am 15.11.2024
Durchsuche:367

How to Efficiently Load a File into an `std::vector`?

Effizientes Laden einer Datei in einen std::vector

So laden Sie eine Datei effizient in einen std::vector muss man unnötige Kopien und Speicherneuzuweisungen vermeiden. Während der ursprüngliche Ansatz, der Reserve und Read() verwendet, direkt erscheinen mag, ändert Reserve() allein nichts an der Kapazität des Vektors.

Kanonische Methode mit Iteratoren:

Die kanonische Der Ansatz verwendet Eingabestream-Iteratoren, um den Vektor bequem aus den Dateiinhalten zu erstellen:

#include 
// ...

std::ifstream testFile("testfile", std::ios::binary);
std::vector fileContents((std::istreambuf_iterator(testFile)),
                               std::istreambuf_iterator());

Optimieren für Neuzuweisungen:

Wenn die Minimierung von Speicherneuzuweisungen von entscheidender Bedeutung ist, weisen Sie Platz im Vektor zu, bevor Sie den Dateiinhalt laden :

#include 
// ...

std::ifstream testFile("testfile", std::ios::binary);
std::vector fileContents;
fileContents.reserve(fileSize);
fileContents.assign(std::istreambuf_iterator(testFile),
                    std::istreambuf_iterator());

Durch die Verwendung von Stream-Iteratoren und die Vorabzuweisung von Speicher bei Bedarf ermöglichen diese Ansätze ein effizientes Laden von Dateien in einen std::vector.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3