C ++ stringstream输出性能

时间:2013-06-06 14:51:17

标签: c++ performance stringstream

我测试了以下两个代码段,发现代码段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();

2 个答案:

答案 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)

令人困惑的是,ss.str()ss.str("")的行为不同:

ss.str()返回基础字符串的副本,而ss.str(const string&)更改基础存储。

Documentation