我有一个应用程序,必须遍历每个字符(以检查某些特殊情况),然后使用ostream put方法将其写入流中。
当将ostream *指向文件流时,它的执行速度比ostream *指向重定向到文件的cout时快得多。
在这个(/sf/answers/118853451/)答案中,我看到使用fstream的可能会更快,因为与cout相比,缓冲多了一层。我以为,当我知道输出将要输出到cout时,我可以遍历字符串缓冲区,当缓冲区已满时,将其附加到cout。这样,我可以获得另一层缓冲,性能将会提高。
因此,我在这里进行了测试,以编写3200万行,每行是一个十个字符的字符串。我使用cout,fstream和stringbuffer编写它们,后来将它们附加到cout。
void print_to_ostream(ostream *out, string& ones)
{
for (int i = 0; i < 32000000; ++i){
const char* ones_char = ones.c_str();
for (int j = 0; j < ones.size(); ++j ){
out->put(ones_char[j]);
}
}
}
int main(void){
string ones ="1111111111";
ostream *out = &cout;
size_t cout_time = 0;
size_t file_time = 0;
size_t cout_buffered_time = 0;
// print cout using ostream
mono_tick_timer time;
print_to_ostream(out, ones);
cout_time += time.tick();
// write to file …Run Code Online (Sandbox Code Playgroud)