加快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 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的速度相比了。

时间: 2024-08-05 19:36:03

加快cin的读入速度的相关文章

如何使用浏览器缓存来加快站点的访问速度 转载

当我们想尽办法提高服务器负载能力的时候,是否曾想过,其实浏览器也有缓存功能,我们也可以利用浏览器的缓存功能来减少服务器的负载,提高网站吞吐量?        当我们使用抓包工具查看http状态时,我们可以看到200,304,from cache之类的标识,也许你也早已注意到了他们,并明白他们的意思.但是,你是否想过在你的程序中加入代码主动告诉浏览器,更好地利用浏览器缓存. 备注:本章所有案例都是使用chrome 17.0.963.79 m浏览器,测试方式为每次打开浏览器新窗口的方式测试,而不是F

加快VisualStudio的开发速度--VS的一些开发技巧

最近不得不使用VisualStudio来进行一些开发,用习惯了Eclipse,感觉VS很难上手,不过通过google,把VS进行Eclipse化,顺便记录下来,以防忘记. 1)显示文字的自动完成. 改变快捷键为 Alt+/ : 方法:工具->选项,在弹出的对话框中选择 环境->键盘.找到"编辑:完成单词"(可以进行过滤查询),然后改成Atl+/ 2) 在Eclipse的Project Explorer上有个“Link with Editor”按钮,用来同步打开的文档和Pro

如何提高cin/cout的速度

如何提高cin/cout的速度 写在前面 在无数的算法比赛中,不难看到下面这样的东西: ios::sync_with_stdio(false); 甚至是这样的东西: ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 现在,尽量用"\n"替换可以替换的endl .(考虑流输出) 好了,以上就是我目前知道的技巧. 为什么 [ref] sync_with_stdio(), tie()的应用 sync_

加快mysql导入导出速度

MySQL导出的SQL语句在处理百万级数据的时候,可能导入要花几小时.在导出时合理使用几个参数,可以大大加快导入的速度. -e 使用包括几个VALUES列表的多行INSERT语法; --max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小; --net_buffer_length=XXX TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行. 注意:max_allowed_packet 和 net_buffer_length 不能

对于scanf和cin的输入输出速度的验证

本文为https://www.byvoid.com/zhs/blog/fast-readfile的验证性文章 --------------------------------------------------------------------------- 首先生成一千万个随机数 1 #include<cstdio> 2 #include<ctime> 3 #include<cstdlib> 4 int main () 5 { 6 freopen("dat

加快Bitmap的访问速度

引言 在对Bitmap图片操作的时候,有时需要用到获取或设置像素颜色方法:GetPixel 和 SetPixel, 如果直接对这两个方法进行操作的话速度很慢,这里我们可以通过把数据提取出来操作,然后操作完在复制回去可以加快访问速度 两种方法 其实对Bitmap的访问还有两种方式,一种是内存法,一种是指针法 1.内存法 这里定义一个类LockBitmap,通过把Bitmap数据拷贝出来,在内存上直接操作,操作完成后在拷贝到Bitmap中 public class LockBitmap { Bitm

加快XCode编译链接速度(200%+)—XCode编译慢液

最近在一个大型项目的开发的时候遇到一个很头疼的问题,由于该项目的代码更,每次建立联系1纪要.浪费时间调试.因此,一些研究如何提高编译链接速度,这里给大家分享. 为了提高编译和链接的是以下三种方式的速度: 1. 增加XCode编译时使用的线程数 defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4 XCode默认使用与CPU核数同样的线程来进行编译,但因为编译过程中的IO操作往往比CPU运算要多,因此适当的提升线程数能够

加快android studio 编译速度zz

工程build一次太慢  经过各种搜索 整合以下 仅供参考 1.在下列目录中新建 gradle.properties 文件 /home//.gradle/ (Linux) /Users//.gradle/ (Mac) C:\Users\\.gradle (Windows) 在文件中添加 org.gradle.daemon=true 2.在本地工程的gradle.properties 添加如下 org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -X

关于加快INSERT语句执行速度和HINT /*+ append */及/*+ append nologging */的使用

(非归档模式下)创建表T01: SQL> create table t01 as select * from dba_objects where 1=2; Table created. (非归档模式下)查看当前redo大小: SQL> select value 2 from v$mystat,v$statname 3 where v$mystat.statistic#=v$statname.statistic# 4 and v$statname.name='redo size' 5 / VAL