Author: YuMaNzI
2014/06/28 1. Running-time Comparison of getline and operator >>
To Be Continue.
1. Running-time Comparison of getline and operator >>
I use fstream to read a graph, which is maintained in a file. Each line of the file consisting two integers, representing a directed edge. The graph contains more than 10 million edges.
for (int i = 0; i < edgeC; i++) {
/* operator >> */
input >> s[i] >> t[i];
/* getline */
getline(input, line);
int space = line.find(' ');
s[i] = stoi(line.substr(0, space));
t[i] = stoi(line.substr(space + 1, line.length() - space - 1));
}
I first use >> to read the two integers in each line. It takes 11.912 sec in total to finish the loop. An alternative way is to get each line by getline function, followed by splitting the line into two substrings, and convert each substeing into an integer. The second method takes 5.383 sec in total.
Conclusion: although the second way involves more operations than simple >> method, but the running times of the second method is only less than half running time of its competitor. It indicates that frequent >> operations is a heavy task, and should be avoided.