阜南网站建设,创建网站制作仪表企业,学校seo推广培训班,黄页88标题生成器之前上传UVa227 puzzle时#xff0c;好不容易AC了#xff0c;但发现自己用时50(ms)#xff0c;而在VJ上看到人家都是40ms、20ms#xff0c;于是打开一个20ms的代码查看人家强在哪里。但结果研究了半天感觉差不多#xff0c;于是想着应该不是算法的问题。然后又想到#x… 之前上传UVa227 puzzle时好不容易AC了但发现自己用时50(ms)而在VJ上看到人家都是40ms、20ms于是打开一个20ms的代码查看人家强在哪里。但结果研究了半天感觉差不多于是想着应该不是算法的问题。然后又想到网上提交的答案大家都是用scanf和printf写的而我用的cin cout而这题的确需要大量的输入输出于是就想着把所有cin cout改成scanf printf。结果 —。— 上面c版下面c版。 于是我很好奇C的输入输出方法和C提倡的方法为什么差距那么大。经过一番研究和查询结果如下 首先是scanf和cin cin之所以慢主要是因为要与scanf同步的关系即允许scanf与cin混用。但是如果你的代码里没用到scanf那么想关闭同步也可以。 只要使用这行代码就可关闭同步std::ios::sync_with_stdio(false); 关闭同步后的cin效率大大提高。有人说比scanf还高有人说差不多网上评论不一。其实cin关闭同步后真正的效率如何还是依赖编译器。下面这篇博文很详尽地比较了cin和关闭同步的cin和scanfhttps://www.byvoid.com/blog/fast-readfile 。看完这篇基本就可以了解性能上的差异了编译器占的因素蛮大的。那么关了同步的cin与scanf差不多但是cin是新标准更安全更便捷。况且string只能用cin。 然后是printf和cout 对于cout和printf则效率差异不明显。有人认为流更快有人认为printf快逛论坛查询时看到他们都吵起来了。具体怎样我又找到一篇博文http://www.cnblogs.com/killerlegend/p/3918452.html 。他的结论是输出时尽量使用cout,输入时尽量使用scanf。不过我也测试了试了点最简单的 int main()
{clock_t a, b;a clock();for (int i 0;i 29999;i)cout i \n;b clock();cout b - a;return 0;
} 与 int main()
{clock_t a, b;a clock();for (int i 0;i 29999;i)printf(%d\n,i);b clock();printf(%d,b - a);return 0;
} 结果是cout用时6124printf用时3536。cout比printf差了一倍不到。而且对于cout那句“std::ios::sync_with_stdio(false);”其实是不起作用的它只针对cin。于是我的结论与上面链接里的博文相反。 所以cout和printf效率可以说差不多主要还是看编译器吧。使用时也不必纠结只是cout毕竟新标准更安全适用面更广更灵活。 最后 本文讨论的输入输出使用仅仅针对ACM做题。scanf的确快拿来做题还是很不错的。输入量少的话拿cin也毫无问题刷个题目也没必要特地跑过去关闭同步。而且cin更安全更便捷还支持重载。且对于string与自定义的数据就只能用cin、cout没跑了。 对于我们这种有强迫症、选择恐惧症的有两个方法给你自由选择也未必是个好事。不分分清楚心理难受哈哈。 转载于:https://www.cnblogs.com/xienaoban/p/6798095.html