パフォーマンスのオーバーヘッドはどれくらいか知りたいのですが
string line, word;
while (std::getline(cin, line))
{
istringstream istream(line);
while (istream >> word)
// parse word here
}
c++
これが入力をトークン化する標準的な方法だと思います。
具体的には:
getline
各行は、最初に、次にistream
コンストラクターを介して、最後operator>>
に各単語に対してを介して、 3回コピーされますか?- 頻繁な建設と破壊が
istream
問題になるでしょうか?istream
外側のwhile
ループの前に定義した場合の同等の実装は何ですか?
ありがとう!
アップデート:
同等の実装
string line, word;
stringstream stream;
while (std::getline(cin, line))
{
stream.clear();
stream << line;
while (stream >> word)
// parse word here
}
ストリームをローカルスタックとして使用し、行をプッシュして単語をポップアウトします。これにより、以前のバージョンで頻繁に発生したコンストラクタとデストラクタの呼び出しがなくなり、ストリームの内部バッファリング効果が利用されます(この点は正しいですか?)。
代替ソリューションは、std :: stringを拡張してoperator<<
およびをサポートoperator>>
するか、iostreamを拡張してsthをサポートする場合があります。のようにlocate_new_line
。ここでブレインストーミングをします。