c++ stringstream输出性能
C++ stringstream output performance
我测试了下面两个代码片段,发现代码片段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);
只设置输出位置指示器
ss.str("")
和ss.str()
是两个不同的操作。看到的:http://en.cppreference.com/w/cpp/io/basic_stringstream/str
令人困惑的是,ss.str()
不做与ss.str("")
相同的事情:
ss.str()
返回底层字符串的副本,而ss.str(const string&)
改变底层存储。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- OpenMP阵列性能较差
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 递归列出所有目录中的C++与Python与Ruby的性能
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 性能输出中有奇怪的字符.
- 从标准输出读取奇怪的性能问题
- 使用 ofstream 进行缓冲文本输出以获得性能
- Windows和OSX之间iostream控制台输出的性能差异
- c++ stringstream输出性能