首頁 > 後端開發 > C++ > 如何有效率地將檔案讀入 std::vector?

如何有效率地將檔案讀入 std::vector?

Susan Sarandon
發布: 2024-11-09 18:13:02
原創
193 人瀏覽過

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

有效率地將檔案讀入std::vector

在某些情況下,將檔案讀入std::vector高效率對於避免不必要的複製和開銷至關重要。一種方法是使用reserve()方法為向量分配空間,然後使用read()來填入向量。

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板