c++ stringstream输出性能

C++ stringstream output performance

本文关键字:性能 输出 stringstream c++      更新时间:2023-10-16

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

可检测到两种电位差:

out<<ss.str();将数据复制为std::basic_string,其中out<<ss.rdbuf();返回一个类型为std::basic_streambuf<CharT,Traits>的指针

ss.str("");替换stringstream中的内容,其中ss.seekp(ios_base::beg);只设置输出位置指示器

ps。

ss.str("")ss.str()是两个不同的操作。看到的:http://en.cppreference.com/w/cpp/io/basic_stringstream/str

令人困惑的是,ss.str()不做与ss.str("")相同的事情:

ss.str()返回底层字符串的副本,而ss.str(const string&)改变底层存储。

文档