我测试了以下两个代码段,发现代码段A比代码段B效率更高。为什么? str()
有复制操作,但rdbuf()
没有。 str("")
比str()
贵吗?
代码段A:
ofstream out("foo.txt");
stringstream ss;
for(int i = 0; i < 300000; i++) {
// append long text to ss
out<<ss.str();
ss.seekp(ios_base::beg);
}
out.close();
代码段B:
ofstream out("foo.txt");
stringstream ss;
for(int i = 0; i < 300000; i++) {
// append long text to ss
out<<ss.rdbuf();
ss.str("");
}
out.close();
答案 0 :(得分:3)
可以检测到两个潜在的差异:
out<<ss.str();
将数据复制为std::basic_string
,其中out<<ss.rdbuf();
返回std::basic_streambuf<CharT,Traits>
类型的指针
ss.str("");
替换字符串流中的内容,其中ss.seekp(ios_base::beg);
仅设置输出位置指示符
PS。
ss.str("")
和ss.str()
是两种不同的操作。
看到:
http://en.cppreference.com/w/cpp/io/basic_stringstream/str
答案 1 :(得分:1)