我想知道什么是性能开销
string line, word;
while (std::getline(cin, line))
{
istringstream istream(line);
while (istream >> word)
// parse word here
}
我认为这是c++
标记输入的标准方法。
再具体一点:
- 每行是否复制了三次,首先是 via
getline
,然后是istream
构造函数,最后operator>>
是每个单词的 via? - 频繁的建设和破坏会
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<<
and operator>>
,或扩展 iostream 以支持某事。喜欢locate_new_line
。只是在这里集思广益。