テキスト ファイルからグラフ隣接情報を読み取ろうとすると、さまざまな数の整数が次で終わる行に遭遇することがあります。 「ん」。 getline() メソッドを使用して各行を個別に取得すると、整数の数が一貫していないため、各行を正確に解析することが困難になります。この問題に対処し、これらの値をベクトルに効率的に格納するための戦略が模索されています。
従来のアプローチでは、getline() によって読み取られた各行を反復処理し、istringstream オブジェクトを利用して各行を解析する必要があります。整数は順番に読み取られるため、それらをベクトルに追加し、必要に応じてさらに操作することができます。次のコードは、このアプローチの例を示しています。
<code class="cpp">#include <fstream> #include <sstream> #include <string> #include <vector> int main() { std::ifstream infile("thefile.txt"); std::string line; while (std::getline(infile, line)) { std::istringstream iss(line); int n; std::vector<int> v; while (iss >> n) { v.push_back(n); } // Do something with v } }</code>
別の解決策には、単一行の for ループが含まれます。 istream_iterator クラスを利用すると、値をベクトルに直接読み取ることができるため、中間コンテナの必要性が減ります。 std::move.
<code class="cpp">#include <fstream> #include <string> #include <vector> int main() { std::vector<std::vector<int>> vv; for (std::string line; std::getline(std::cin, line); vv.push_back(std::vector<int>(std::istream_iterator<int>(std::stay(std::istringstream(line))), std::istream_iterator<int>()) ) ) { } }</code>から発生する可能性のある潜在的なダングリング参照を防ぐために、補助関数も使用されています。
以上がC でさまざまなカウントを持つテキスト ファイルの整数をベクトルに効率的に解析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。