码迷,mamicode.com
首页 > 其他好文 > 详细

加快cin的读入速度

时间:2016-10-03 16:56:32      阅读:403      评论:0      收藏:0      [点我收藏+]

标签:

加快cin的读入速度

  虽然C++有cin函数,但看别人的程序,大多数人都用C的scanf来读入,其实是为了加快读写速度,难道C++还不如C吗!?技术分享其实cin效率之所以低,不是比C低级,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而且是C++为了兼容C而采取的保守措施。

  先讲一个cin中的函数——tie,证明cin和scanf绑定是同一个的流。

  tie是将两个stream绑定的函数,空参数的话返回当前的输出流指针。

  先码代码:

#include <iostream>
#include <fstream>
#include <windows.h>

using namespace std;

int main()
{
    ostream *prevstr;
    ofstream ofs;
    ofs.open("test.out"); 
    printf("This is an example of tie method\n");     //直接输出至控制台窗口

    *cin.tie() << "This is inserted into cout\n";    // 空参数调用返回默认的output stream,也就是cout
    prevstr = cin.tie(&ofs);    // cin绑定ofs,返回原来的output stream
    *cin.tie() << "This is inserted into the file\n";    // ofs,输出到文件
    cin.tie(prevstr);    // 恢复原来的output stream
    ofs.close();    //关闭文件流
    system("pause");
    return 0;
}

   控制台内的输出:

1 This is an example of tie method
2 This is inserted into cout
3 请按任意键继续...

  文件内输出:

1 This is inserted into the file

sync_with_stdio

  回到重点,现在知道tie可以绑定Stream,其实也可以解绑,只需要绑定空值(0或null皆可),所以可以用此方法解绑cin和scanf。

#include <iostream>
int main() 
{
    std::cin.tie(0);
    return 0;
}

   还有一种方法,调用函数sync_with_stdio(false),这个函数是一个“是否兼容stdio”的开关,C++为了兼容C,保证程序在使用了std::printf和std::cout的时候不发生混乱,将输出流绑到了一起。可以与tie函数一同使用:

#include <iostream>
int main() 
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    return 0;
}

   这样,cin的速度就可以与scanf的速度相比了。

加快cin的读入速度

标签:

原文地址:http://www.cnblogs.com/Bita/p/5929087.html

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