如果你覺得社課還算輕鬆,這裡提供你一些額外的補充教材。
這些是我們在備課的時候覺得稍微進階,或是篇幅太多,而沒有放在正式社課的內容。
這裡有目錄,左邊也有,可以跳到自己想看的地方
建議必看的地方 :
記憶體是我們寫程式的好朋友,當我們宣告一個變數,就等同於在記憶體上畫出一個空間,
讓這個空間存放變數的值。所以你可以把變數理解成 "一塊儲存可變動的值的記憶體空間"。
記憶體在之後的指標跟資料結構的時候都會再提到,
整數
浮點數
字元跟字串
整數、大寫字母、小寫字母的ASCII Code
分別都是連續的
其實字串是由字元所組成,最後會在結尾加上 '\0' 表結束
那為什麼要用 std::string ?
因為 std::string 可以這樣
怎麼做到的?
查查指標陣列吧,但看看就好
References:
TutorialsPoint
W3School C++ : String
慎入:
Microsoft Docs
上課的時候我們有給過這張圖片:
其中有兩個函式 stoi(s) 跟 to_string(i)是在比較新的C++版本,從C++11之後才出現的。而因為DevC++的默認C++版本是很古老的C++98,所以如果需要使用這兩個函式實作時,你會發現 compiler 一直跟你說:
"to_string" / "stoi" is not declared in this scope.
所以如果需要使用這兩個函式,我們需要把DevC++的版本提高。
依序點開Tools -> Compiler Options,並在General的第一個方框內打上 "-std=c++11" ,即可把你的C++版本手動升級到C++11囉!
為您隆重介紹,std::setprecision!!
要怎麼只動到小數點後的位數?
沒錯,加了fixed後會自動補0
那要怎麼還原?
除此之外,有關輸出對齊的功能也一併放在iomanip
以下是解說
Microsoft Doc
true和false是保留字
這要從auto說起
看出來了嗎?
auto會隨著後面指定的值轉換型態
可是我想讓a變成long long怎麼辦?
這時候就是後綴詞出馬的時候了
說人話
a++會先回傳a的值,再把a + 1
++a會先把a + 1,再回傳a的值
說人話:
a++是先運算後再加 , ++a是先加後再運算
猜猜看:
答案是15 * 6 - 10 / 2 + 7 - 69的值喔
當然scanf和cin也是相同的概念
這要提到緩衝區的觀念
從上面的實驗也可以知道緩衝區也拖慢了速度
那為什麼要有緩衝區,或著說,甚麼是緩衝區?
緩衝區大小:看各電腦系統
Windows是32768個字元
超過時就會直接輸入
在讀取輸入的時候分為三種
字緩衝以空格' '為分界,當遇到空格時會將前面的東西寫入程式,再把空格清除。
常用的cin >> , printf都是這樣
行緩衝以行'\n'為分界,當用戶按下enter的時候才會把前面的東西寫入程式。
在 C++ 中可以用 getline() 來達到這件事
全緩衝直到buffer滿了之後才會寫入,或是使用特殊的函式強制寫入緩衝區的內容
用法:我不知道
因為將讀取到的東西寫入很花時間,
所以比起一個字一個字的寫入,還不如一次寫入多個資料效率較高
有,像是cerr就是因為必須要盡快輸出錯誤訊息所以沒有緩衝區
也可以使用cin.get()
可以使用 std::flush 或 std::fflush(stdout)
當有人嘗試要用std::fstream的時候。
std::ofstream中寫到的東西是全緩衝,直到程式結束後才會輸入。
聽不懂嗎 ? 聽不懂沒關係我們不會教(絕對不會在正課教)。
有興趣的我們放連結在下面:
Microsoft Doc
W3School C++ Files
自己查不想教
還有這東西現在基本上都有應對方式