粘贴自:https://blog.csdn.net/weixin_44015865/article/details/84974373

还是不要用了,做ZOJ-4016(URL: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4016)还是会超时啊,还是老老实实用scanf和printf吧!

在C++中的输入和输出有两种方式,一种是scanf和printf,另一种是cin和cout,在#include<bits/stdc++.h>这个万能头文件下,这两种方式是可以互换的

C++和C很相似,很多大佬都用C++写C,但是在后面的一种方式中cin和cout的输入和输出效率比第一种低,原来而cin,cout之所以效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消iostream的输入 输出缓存,可以节省许多时间,使效率与scanf与printf相差无几,还有应注意的是scanf与printf使用的头文件应是stdio.h而不是 iostream。

在学校的OJ上后面的时间复杂度要求很低,有好多时候TLE不是因为代码的问题,对于初学C++的人来说根本不知道ios::sync_with_stdio(false);这个东西。

以下代码是SDUT上的一个数据结构的题目

Logout

顺序表应用4-2:元素位置互换之逆置算法(数据改进)

Time Limit: 80 ms Memory Limit: 600 KiB

Problem Description

一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),设计一个时间复杂度为O(N)、空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段。

注意:交换操作会有多次,每次交换都是在上次交换完成后的顺序表中进行。

Input

第一行输入整数len(1<=len<=1000000),表示顺序表元素的总数;

第二行输入len个整数,作为表里依次存放的数据元素;

第三行输入整数t(1<=t<=30),表示之后要完成t次交换,每次均是在上次交换完成后的顺序表基础上实现新的交换;

之后t行,每行输入一个整数m(1<=m<=len),代表本次交换要以上次交换完成后的顺序表为基础,实现前m个元素与后len-m个元素的交换;

Output

输出一共t行,每行依次输出本次交换完成后顺序表里所有元素。

Sample Input

10

1 2 3 4 5 6 7 8 9 -1

3

2

3

5

Sample Output

3 4 5 6 7 8 9 -1 1 2

6 7 8 9 -1 1 2 3 4 5

1 2 3 4 5 6 7 8 9 -1

//TLE超时代码
#include<bits/stdc++.h>
using namespace std;
int a[1000010];
void creatlist(int n)
{
for(int i=0; i<=n-1; i++)
{
cin>>a[i];
}
}
void changelist(int n,int m)
{
int t;
while(n<m)
{
t=a[n];
a[n]=a[m];
a[m]=t;
n++;
m--;
}
}
void finally(int m,int len)
{
changelist(0,len-1);
changelist(0,len-1-m);
changelist(len-m,len-1); }
int main()
{
int len;
cin>>len;
creatlist(len);
int t;
cin>>t;
while(t>0)
{
int m;
cin>>m;
finally(m,len);
for(int i=0; i<=len-1; i++)
{
if(i==len-1)
{
cout<<a[i]<<endl;
}
else
{
cout<<a[i]<<" ";
}
}
t--;
}
return 0;
}

这是我用cout输出cin输入的代码,结果是TLE,而下面的AC代码

//AC代码
#include<bits/stdc++.h>
using namespace std;
int a[1000010];
void creatlist(int n)
{
for(int i=0; i<=n-1; i++)
{
cin>>a[i];
}
}
void changelist(int n,int m)
{
int t;
while(n<m)
{
t=a[n];
a[n]=a[m];
a[m]=t;
n++;
m--;
}
}
void finally(int m,int len)
{
changelist(0,len-1);
changelist(0,len-1-m);
changelist(len-m,len-1); }
int main()
{
ios::sync_with_stdio(false);
int len;
cin>>len;
creatlist(len);
int t;
cin>>t;
while(t>0)
{
int m;
cin>>m;
finally(m,len);
for(int i=0; i<=len-1; i++)
{
if(i==len-1)
{
cout<<a[i]<<endl;
}
else
{
cout<<a[i]<<" ";
}
}
t--;
}
return 0;
}

可以看出这两段代码只有输入输出方式不同,但是提交结果一个AC一个TLE,在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据,知道了ios::sync_with_stdio(false);这个可以大幅提高大数据的输入和输出以节省时间

关于C++中ios::sync_with_stdio(false)的更多相关文章

  1. ios::sync_with_stdio(false)提高C++读写速度

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:ios::sync_with_stdio(false)提高C++读写速度     本文地址:h ...

  2. 关于std::ios::sync_with_stdio(false)

    std::ios::sync_with_stdio(false); 很多C++的初学者可能会被这个问题困扰,经常出现程序无故超时,最终发现问题处在cin和cout上,(甚至有些老oier也会被这个问题 ...

  3. 关于ios::sync_with_stdio(false)

    作用就是取消同步,这样的话使用cin就和使用scanf效率相似. 但是今天在做题的时候碰到一点小问题,就是在关闭同步的时候使用scanf是交了一发代码,然后RE了(经检查scanf没有写错),而把关同 ...

  4. 关于ios::sync_with_stdio(false);和 cin.tie(0)加速c++输入输出流

    原文地址:http://www.hankcs.com/program/cpp/cin-tie-with-sync_with_stdio-acceleration-input-and-output.ht ...

  5. hdu 1754 I Hate It (线段树、单点更新)(PS:ios::sync_with_stdio(false)可以加快cin、cout的读取写出速度)

    I Hate ItTime Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  6. C++输入输出流加速器,关闭同步流,ios::sync_with_stdio(false)和 cin.tie(0)

    leetcode练习时,总会发现运行时间短的代码都会有类似: static int x=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); ; ...

  7. C++关闭同步流 ios::sync_with_stdio(false)

    说明:ios::sync_with_stdio(false) 1.这句语句是用来取消cin的同步,什么叫同步呢?就是iostream的缓冲跟stdio的同步.这就是为什么cin和cout比scanf和 ...

  8. std:ios:sync_with_stdio (false)以及局限性

    如何在输入输出上提高一下效率emmmm #include<iostream> #include<stdio.h> #include<stdlib.h> #inclu ...

  9. std::ios::sync_with_stdio(false);

    这句语句是用来取消cin的同步,什么叫同步呢?就是iostream的缓冲跟stdio的同步.如果你已经在头文件上用了using namespace std;那么就可以去掉前面的std::了.取消后就c ...

随机推荐

  1. Cookie/Session的机制与安全

    转载自:https://harttle.land/2015/08/10/cookie-session.html Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以 ...

  2. JavaScript实现预览本地上传图片

    <html> <head> <title> www.jb51.net图片上传预览 </title> <script> function Pr ...

  3. .Net开发常用工具插件

    多功能工具 Notepad++/Sublime Text 3/VS code Web请求工具 Postman .Net开发工具 Microsoft Visual Studio以及代码规范审查插件Sty ...

  4. LightGBM总结

    一.LightGBM介绍 LightGBM是一个梯度Boosting框架,使用基于决策树的学习算法.它可以说是分布式的,高效的,有以下优势: 1)更快的训练效率 2)低内存使用 3)更高的准确率 4) ...

  5. linux 系统管理11 ——系统安全及应用

    一.基本安全措施 1.系统账号清理 (1).将非登陆用户的shell设为/sbin/nologin 方法一.usermod -s 方法二.chsh命令,交互式修改 方法三.chsh -s usermo ...

  6. Linux运维跳槽40道面试精华题

    Linux运维跳槽40道面试精华题 运维派 3天前 1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护 ...

  7. zipCrack-v1.1 工具介绍

    一个暴力破解zip的工具 用python开发 与kali 自带的fcrackzip类似 git地址:https://github.com/mapyJJJ/python3-for-linux-h-.gi ...

  8. SQL死锁操作

    这两天数据库经常被锁,所以记录一下操作: 查看被锁表:select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) ...

  9. Vue系列之 => 使用webpack-dev-server工具实现自动打包编译

    安装webpack-dev-server (webpack版本3.6.0,webpack-dev-server版本2.11.3)注意版本兼容问题,不然会有N多错误. npm i webpack-dev ...

  10. 【转】数据处理常用的sql语句整理

    一下语句都是基于 mysql数据库 查询是否使用索引 explain  select * FROM t_table1; 结果列的含义: table:此次查询操作是关联哪张数据表 type:连接查询操作 ...