码迷,mamicode.com
首页 > 移动开发 > 详细

使用std::ios::tie与std::ios_base::sync_with_stdio加速流

时间:2016-01-29 21:09:58      阅读:381      评论:0      收藏:0      [点我收藏+]

标签:

   std::ios_base::sync_with_stdio

static bool sync_with_stdio( bool sync = true );  

 

与cstdio流[静态]切换同步

    打开或关闭所有的标准iostream流与它们对于的标准C流之间的同步。

    实际上,这意味着C++和C流使用相同的缓冲区,因此,可以自由地混合使用流。同步C++标准流可以确保线程安全。

    默认情况下,iostream对象和cstdio流同步。如果同步关闭,C++标准流独立地缓冲输入输出,在某些情况下,这是相当快速的。


参数

syn

    用于指示是否同步的布尔值,值为true开启同步,为false时关闭同步。


返回值

    返回被调用之前的同步状态。当它第一次被调用,总是返回true。


使用样例

#include <iostream>
#include <cstdio>
 
int main()
{
    std::cout.sync_with_stdio(false);
    std::cout << "a\n";
    std::printf("b\n");
    std::cout << "c\n";
}

 


程序输出

 

b
a
c

 




    对于str标准流,它与C f流同步时,下列三对函数的效果相同。

    (1)std::fputc(f, c) 与 str.rdbuf()->sputc(c)

    (2)std::fgetc(f) 与 str.rdbuf()->sbumpc()

    (3)std::ungetc(c, f) 与 str.rdbuf()->sputbackc(c)


    std::ios::tie

get (1) ostream* tie() const;

set (2) ostream* tie (ostream* tiestr);

第一种形式返回一个指向当前绑定输出流的指针。

第二种形式绑定对象tiestr,并返回一个指针,它指向调用之前绑定的stream流。

【未完待续】


    算法竞赛中,关闭iostream对象和cstdio流同步以提高输入输出的效率。

    (调用ios::sync_with_studio(false))

    在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。

使用std::ios::tie与std::ios_base::sync_with_stdio加速流

标签:

原文地址:http://www.cnblogs.com/cumulonimbus/p/5169943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!