Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lese ich eine Datei effizient in einen std::vector ein?

Wie lese ich eine Datei effizient in einen std::vector ein?

Linda Hamilton
Linda HamiltonOriginal
2024-11-21 06:25:10976Durchsuche

How to Efficiently Read a File into an std::vector?

Effizientes Einlesen von Dateien in einen std::vector

Bei der Suche nach einer optimalen Methode zum Einlesen einer Datei in einen std: :vector ist es wichtig, unnötiges Kopieren zu minimieren und die Effizienz aufrechtzuerhalten. Ein häufiges Missverständnis besteht darin, vor dem Lesen Platz im Vektor zu reservieren, aber „reserve()“ fügt tatsächlich keine Elemente in den Vektor ein.

Für eine optimierte Lösung beinhaltet der kanonische Ansatz die Verwendung von Iteratoren:

#include <iterator>

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

Bei diesem Ansatz werden zwei Iteratoren definiert. Einer zeigt auf den Anfang des Eingabedateistreams und der andere auf das Ende. Der Vektor wird dann durch Iterieren über den von diesen Iteratoren definierten Bereich konstruiert.

Um mögliche Neuzuweisungen während des Lesevorgangs abzuschwächen, kann die Methode „reserve()“ eingesetzt werden:

#include <iterator>

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

Durch Reservieren Platz innerhalb des Vektors vor der Zuweisung von Werten, wird die Zuordnungseffizienz verbessert und die Wahrscheinlichkeit einer Speicherfragmentierung und Leistungseinbußen verringert.

Das obige ist der detaillierte Inhalt vonWie lese ich eine Datei effizient in einen std::vector ein?. 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