日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++输入输出:cin/cout 还是 scanf/printf?

發(fā)布時(shí)間:2023/11/30 c/c++ 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++输入输出:cin/cout 还是 scanf/printf? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

相信使用C++的人都有一種迷惑或者是不自信:在輸入輸出的時(shí)候是不是應(yīng)該使用scanf/printf更好呢,因?yàn)閭髡f(shuō)cin/cout龜速,我當(dāng)時(shí)也長(zhǎng)期被這個(gè)所困擾,后來(lái)在閱讀C++ primer第五版的時(shí)候我自己做了一個(gè)測(cè)試,發(fā)現(xiàn)如果不使用std::ios_sync_with_stdio(false);關(guān)閉和C庫(kù)函數(shù)的同步的話的確scanf/printf快很多,大概相差五倍,但是如果關(guān)閉同步的話,cin/cout是比scanf/printf快8%-10%的。(這兩個(gè)數(shù)據(jù)是我后面看別人測(cè)量的,我自己只是簡(jiǎn)單測(cè)量了一下)

之所以關(guān)閉緩沖以后cin/cout比較快,是因?yàn)閏in/cout對(duì)輸入?yún)?shù)和類(lèi)型的推斷是在編譯時(shí)確定的,而scanf/printf是在運(yùn)行時(shí)確定的。

在我以前的一篇博客:C++Primer學(xué)習(xí)筆記:第1章 開(kāi)始中我提到了這一點(diǎn)。

如果認(rèn)為我自己的測(cè)量可能有誤差,可以看一下大神們的回答:
Cin-Cout vs Scanf-Printf
Using scanf() in C++ programs is faster than using cin?

和我的說(shuō)法是一致的,以后被人懟你怎么還用cin/cout的時(shí)候,你可以拿出這些測(cè)評(píng)讓他們瞧瞧,我們也應(yīng)該對(duì)C++自信起來(lái),不要想著C++沒(méi)有C底層好像速度就差一些。

但是之前參加競(jìng)賽的時(shí)候,我信心滿滿地使用cin/cout進(jìn)行輸入輸出,卻總是TEL,我以為是程序算法的問(wèn)題,檢查了好久好久,最后才發(fā)現(xiàn)是因?yàn)槭褂昧薱in/cout的原因,改成scanf/printf后程序就AC了,看到這里你是不是心里一驚:搞什么嘛,上面的測(cè)評(píng)都是唬人的嘛

其實(shí)之所以即使關(guān)閉了和C庫(kù)的同步,我的程序還會(huì)TEL和cin/cout沒(méi)有什么關(guān)系,罪魁禍?zhǔn)资莈ndl,相信很多學(xué)習(xí)C++的人都和我一樣,習(xí)慣了使用endl進(jìn)行換行,同時(shí)刷新緩沖區(qū),一舉兩得,美滋滋,但是其實(shí)正是因?yàn)閑ndl會(huì)強(qiáng)制刷新緩沖區(qū),導(dǎo)致頻繁的IO操作,使得程序效率迅速降低。因此除非是使用打樁調(diào)試(就是及時(shí)輸出調(diào)試信息,因?yàn)檫@里我們要求輸出信息有時(shí)效性,所以要及時(shí)刷新緩沖區(qū)),否則都不要使用endl,而使用\n進(jìn)行換行。

知道了這兩點(diǎn):

std::ios::sync_with_stdio(false); cout << "Hello world" << "\n";

我們就可以放心地使用cin/cout進(jìn)行輸入輸出啦,而且效率肯定是最快的。

在使用cin進(jìn)行循環(huán)讀入的時(shí)候可能會(huì)遇到一點(diǎn)問(wèn)題,可以參考一下我以前寫(xiě)的一篇博客:C++ cin 實(shí)現(xiàn)循環(huán)讀入

有了上面的準(zhǔn)備,我們就可以使用cin/cout開(kāi)心地寫(xiě)代碼啦。

總結(jié)

以上是生活随笔為你收集整理的C++输入输出:cin/cout 还是 scanf/printf?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。