在某些情況下,將檔案讀入std::vector
std::ifstream testFile("testfile", "rb"); std::vector<char> fileContents; int fileSize = getFileSize(testFile); fileContents.reserve(fileSize); testFile.read(&fileContents[0], fileSize);
但是,當使用reserve()調整向量大小時,這種方法會失敗,因為它實際上並未將元素插入向量中。因此,嘗試存取 fileContents[0] 將導致錯誤。
更全面的解決方案涉及使用迭代器。使用輸入檔案流,以下程式碼片段可以實現高效率的檔案讀取:
#include<iterator> //... std::ifstream testFile("testfile", std::ios::binary); std::vector<char> fileContents((std::istreambuf_iterator<char>(testFile)), std::istreambuf_iterator<char>());
此方法利用 istreambuf_iterator 迭代輸入檔案流並將元素直接插入向量中。
如果重新分配是一個問題,可以使用reserve()來預先分配空間向量:
#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>());
在此變體中,reserve( ) 用於根據已知檔案大小分配空間,而allocate() 用於使用迭代器填充向量。
以上是如何有效率地將檔案讀入 std::vector?的詳細內容。更多資訊請關注PHP中文網其他相關文章!