I would like to know what's the performance overhead of
string line, word;
while (std::getline(cin, line))
{
istringstream istream(line);
while (istream >> word)
// parse word here
}
I think this is the standard c++
way to tokenize input.
To be specific:
- Does each line copied three times, first via
getline
, then viaistream
constructor, last viaoperator>>
for each word? - Would frequent construction & destruction of
istream
be an issue? What's the equivalent implementation if I defineistream
before the outerwhile
loop?
Thanks!
Update:
An equivalent implementation
string line, word;
stringstream stream;
while (std::getline(cin, line))
{
stream.clear();
stream << line;
while (stream >> word)
// parse word here
}
uses a stream as a local stack, that pushes lines, and pops out words. This would get rid of possible frequent constructor & destructor call in the previous version, and utilize stream internal buffering effect (Is this point correct?).
Alternative solutions, might be extends std::string to support operator<<
and operator>>
, or extends iostream to support sth. like locate_new_line
. Just brainstorming here.