ホームページ  >  記事  >  バックエンド開発  >  C でファイル全体を効率的に文字列に読み取る方法

C でファイル全体を効率的に文字列に読み取る方法

Susan Sarandon
Susan Sarandonオリジナル
2024-10-30 11:17:02441ブラウズ

How to Read an Entire File into a String Efficiently in C  ?

C でファイルの内容を文字列に効率的に読み取る

Perl などのスクリプト言語と同様に、内容を取得できると有利ですファイル全体を抽出し、それを C の単一の変数に保存します。これによりコードが簡素化され、パフォーマンスが向上します。この投稿では、この目的を達成するための最も効率的なアプローチを検討します。

C の従来の方法は、std::ifstream 関数と std::getline() 関数を使用することです。ただし、これにはファイルを 1 行ずつ繰り返し読み取る必要があり、大きなファイルの場合は非効率的になる可能性があります。

より効率的な解決策は、std::istreambuf_iterator クラスを利用することです。このクラスは、ストリームのコンテンツに対するイテレータ インターフェイスを提供し、1 回の操作でストリーム全体を文字列に読み取ることができます。

このアプローチを示すコード例を次に示します。

<code class="cpp">#include <fstream>
#include <string>

int main(int argc, char** argv) {
  std::ifstream ifs("myfile.txt");
  std::string content((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
  return 0;
}</code>

このコードでは、content 変数がファイル「myfile.txt」の内容で初期化されます。 (std::istreambuf_iterator(ifs)) 式はファイルの内容を読み取る入力イテレータを作成し、(std::istreambuf_iterator()) 式はファイルの終わりをマークする終了イテレータを作成します。次に、assign 関数が呼び出されて、入力イテレータの内容がコンテンツ文字列にコピーされます。

また、次に示すように、一時文字列変数を作成せずに content.assign メソッドを直接使用することもできます。

<code class="cpp">std::ifstream ifs("myfile.txt");
std::string content;
content.assign((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));</code>

この最適化されたアプローチにより、ファイルを 1 行ずつ繰り返し読み取るオーバーヘッドが回避され、特に大きなファイルの場合に効率が大幅に向上します。

以上がC でファイル全体を効率的に文字列に読み取る方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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