Auf der Suche nach einer Optimierung des Dateieinlesens in einen std::vector
Die Lösung liegt in der Verwendung von Iteratoren. Durch die Erstellung eines Eingabe-Streambuf-Iterators und dessen Verwendung zum Konstruieren eines Vektors kann der Inhalt der Datei direkt dem Vektor zugewiesen werden, ohne dass Zwischenkopien erforderlich sind. Der folgende Codeausschnitt veranschaulicht diesen Ansatz:
#include<iterator> std::ifstream testFile("testfile", std::ios::binary); std::vector<char> fileContents((std::istreambuf_iterator<char>(testFile)), std::istreambuf_iterator<char>());
Aus Leistungsgründen kann die Reservierung von Platz im Vektor vor der Zuweisung Neuzuweisungen verhindern:
std::vector<char> fileContents; fileContents.reserve(fileSize); fileContents.assign(std::istreambuf_iterator<char>(testFile), std::istreambuf_iterator<char>());
Das obige ist der detaillierte Inhalt vonWie liest man eine Datei effizient und ohne Overhead in einen „std::vector' ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!