首页 > 代码库 > 加快cin的读入速度
加快cin的读入速度
加快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 method2 This is inserted into cout3 请按任意键继续...
文件内输出:
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的读入速度
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。