Effizientes Einlesen von Dateien in einen std::vector
Bei der Suche nach einer optimalen Methode zum Einlesen einer Datei in einen std: :vector
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!