ホームページ >バックエンド開発 >C++ >ファイルを std::vector に効率的に読み取るにはどうすればよいですか?

ファイルを std::vector に効率的に読み取るにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-21 06:25:101044ブラウズ

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

std::vector へのファイルの効率的な読み取り

ファイルを std に読み取るための最適な方法を探す場合: :vector では、不必要なコピーを最小限に抑え、効率を維持することが重要です。よくある誤解は、読み取り前にベクター内のスペースを予約しようとすることですが、reserve() は実際にはベクターに要素を挿入しません。

最適化されたソリューションの場合、正規のアプローチには反復子の使用が含まれます。

#include <iterator>

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

このアプローチでは、2 つの反復子が定義されます。 1 つは入力ファイル ストリームの先頭を指し、もう 1 つは末尾を指します。次に、これらの反復子で定義された範囲を反復処理することによって、ベクトルが構築されます。

読み取りプロセス中の潜在的な再割り当てを軽減するには、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>());

By reserving値を割り当てる前にベクトル内のスペースを確保すると、割り当て効率が向上し、メモリの断片化やパフォーマンスの低下の可能性が軽減されます。

以上がファイルを std::vector に効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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