ホームページ >バックエンド開発 >C++ >不必要なオーバーヘッドを発生させずにファイルを効率的に std::vector に読み取る方法

不必要なオーバーヘッドを発生させずにファイルを効率的に std::vector に読み取る方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-10 21:35:031048ブラウズ

How to Efficiently Read Files into std::vector Without Unnecessary Overhead?

std::vector にファイルを読み取るための代替方法

std::vector にファイルを読み取るデータ処理タスクには効率的に行うことが不可欠です。ただし、reserve() やsize() などの一部のメソッドでは、要素の初期化により追加のオーバーヘッドが発生します。このため、代替メソッドが優先される場合があります。

そのようなメソッドの 1 つは、std::istreambuf_iterator クラスのイテレータを利用することです。このアプローチにより、不要なコピーが排除され、ファイルの内容に直接アクセスできるようになります。このアプローチの標準形式は次のとおりです。

#include<iterator>
// ...

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

再割り当てを防ぐために、事前にベクトル内のスペースを予約することを検討してください。

#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>());

以上が不必要なオーバーヘッドを発生させずにファイルを効率的に std::vector に読み取る方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。