pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

在 C++ 程序中使用 scanf() 比使用 cin 快嗎?

Using scanf() in C++ programs is faster than using cin?(在 C++ 程序中使用 scanf() 比使用 cin 快嗎?)
本文介紹了在 C++ 程序中使用 scanf() 比使用 cin 快嗎?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我不知道這是否屬實,但是當我閱讀有關提供問題的網站之一的常見問題解答時,我發現了一些引起我注意的東西:

I don't know if this is true, but when I was reading FAQ on one of the problem providing sites, I found something, that poke my attention:

檢查您的輸入/輸出方法.在 C++ 中,使用 cin 和 cout 太慢了.使用這些,您將保證無法通過大量輸入或輸出解決任何問題.改用 printf 和 scanf.

Check your input/output methods. In C++, using cin and cout is too slow. Use these, and you will guarantee not being able to solve any problem with a decent amount of input or output. Use printf and scanf instead.

有人可以澄清一下嗎?在 C++ 程序中使用 scanf() 真的比使用 cin >> something 更快嗎?如果是,在 C++ 程序中使用它是一個好習慣嗎?我認為它是特定于 C 的,雖然我只是在學習 C++...

Can someone please clarify this? Is really using scanf() in C++ programs faster than using cin >> something ? If yes, that is it a good practice to use it in C++ programs? I thought that it was C specific, though I am just learning C++...

推薦答案

這是一個簡單案例的快速測試:一個從標準輸入讀取數字列表并對所有數字進行異或的程序.

Here's a quick test of a simple case: a program to read a list of numbers from standard input and XOR all of the numbers.

iostream 版本:

#include <iostream>

int main(int argc, char **argv) {

  int parity = 0;
  int x;

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}

scanf 版本:

#include <stdio.h>

int main(int argc, char **argv) {

  int parity = 0;
  int x;

  while (1 == scanf("%d", &x))
    parity ^= x;
  printf("%d
", parity);

  return 0;
}

結果

使用第三個程序,我生成了一個包含 33,280,276 個隨機數的文本文件.執行時間為:

Using a third program, I generated a text file containing 33,280,276 random numbers. The execution times are:

iostream version:  24.3 seconds
scanf version:      6.4 seconds

改變編譯器的優化設置似乎根本沒有改變結果.

Changing the compiler's optimization settings didn't seem to change the results much at all.

因此:確實存在速度差異.

Thus: there really is a speed difference.

用戶 clyfish 在下面指出速度差異主要是由于iostream I/O 函數與 CI/O 函數保持同步.我們可以通過調用 std::ios::sync_with_stdio(false);:

User clyfish points out below that the speed difference is largely due to the iostream I/O functions maintaining synchronization with the C I/O functions. We can turn this off with a call to std::ios::sync_with_stdio(false);:

#include <iostream>

int main(int argc, char **argv) {

  int parity = 0;
  int x;

  std::ios::sync_with_stdio(false);

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}

新結果:

iostream version:                       21.9 seconds
scanf version:                           6.8 seconds
iostream with sync_with_stdio(false):    5.5 seconds

C++ iostream 勝出! 事實證明,這種內部同步/刷新通常會減慢 iostream i/o.如果我們不混合使用 stdio 和 iostream,我們可以將其關閉,然后 iostream 是最快的.

C++ iostream wins! It turns out that this internal syncing / flushing is what normally slows down iostream i/o. If we're not mixing stdio and iostream, we can turn it off, and then iostream is fastest.

代碼:https://gist.github.com/3845568

這篇關于在 C++ 程序中使用 scanf() 比使用 cin 快嗎?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How can I read and manipulate CSV file data in C++?(如何在 C++ 中讀取和操作 CSV 文件數據?)
In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,為什么我不能像這樣編寫 for() 循環: for( int i = 1, double i2 = 0;)
How does OpenMP handle nested loops?(OpenMP 如何處理嵌套循環?)
Reusing thread in loop c++(在循環 C++ 中重用線程)
Precise thread sleep needed. Max 1ms error(需要精確的線程睡眠.最大 1ms 誤差)
Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?環形?)
主站蜘蛛池模板: b2b网站大全,b2b网站排名,找b2b网站就上地球网 | 穿线管|波纹穿线管|包塑金属软管|蛇皮管?闵彬专注弱电工程? | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 旋振筛_不锈钢旋振筛_气旋筛_旋振筛厂家—新乡市大汉振动机械有限公司 | 注塑机-压铸机-塑料注塑机-卧式注塑机-高速注塑机-单缸注塑机厂家-广东联升精密智能装备科技有限公司 | 减速机_上海宜嘉减速机| 低压载波电能表-单相导轨式电能表-华邦电力科技股份有限公司-智能物联网综合管理平台 | 上海道勤塑化有限公司 | 硬度计,金相磨抛机_厂家-莱州华煜众信试验仪器有限公司 | 同步带轮_同步带_同步轮_iHF合发齿轮厂家-深圳市合发齿轮机械有限公司 | 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 江苏全风,高压风机,全风环保风机,全风环形高压风机,防爆高压风机厂家-江苏全风环保科技有限公司(官网) | 橡胶接头_橡胶软接头_可曲挠橡胶接头-巩义市创伟机械制造有限公司 | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 「安徽双凯」自动售货机-无人售货机-成人用品-自动饮料食品零食售货机 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 门禁卡_智能IC卡_滴胶卡制作_硅胶腕带-卡立方rfid定制厂家 | 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | pbootcms网站模板|织梦模板|网站源码|jquery建站特效-html5模板网 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 东莞注册公司-代办营业执照-东莞公司注册代理记账-极刻财税 | 江西自考网-江西自学考试网| 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 | 硅胶管挤出机厂家_硅胶挤出机生产线_硅胶条挤出机_臣泽智能装备 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 比士亚-专业恒温恒湿酒窖,酒柜,雪茄柜的设计定制 | 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | 北京模型公司-军事模型-工业模型制作-北京百艺模型沙盘公司 | 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 塑钢件_塑钢门窗配件_塑钢配件厂家-文安县启泰金属制品有限公司 深圳南财多媒体有限公司介绍 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 微妙网,专业的动画师、特效师、CG模型设计师网站! - wmiao.com 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 |