回到「13. 額外語法 (Extra syntax)」
上一頁
C++看起來已經是一個很完整、功能強大的程式語言了
但事實上,世界各地的專家們仍然致力於改善C++,讓原本已經很強的C++的功能更加強大!
因此,C++也是有版本的哦~
別擔心,您在較舊版本C++使用的語法,在新版C++也能無縫接軌的使用!
注意:請先依據這篇設定好編譯參數,才能使用本頁所教的語法
請注意,此篇語法有些適合搭配STL (Standard Library 標準函式庫) 使用,STL的介紹和用法將在下冊講到
「auto」的用法:
先備知識:1~12章的某些基本語法
功能:可以讓電腦在宣告變數的時候自動判斷該變數的型別
簡單舉例:
#include<cstdio> int main() { double a=8.3; //double b=a; auto b=a;//這一行和上面那一行被註解掉的程式碼是等價的 printf("a=%f, b=%f\n",a,b); return 0; }
執行結果 |
再舉一個例子:
#include<cstdio> struct DateOfKSHSFairs { int month,day; }; int main() { DateOfKSHSFairs day1; day1.month=10; day1.day=28; //DateOfKSHSFairs day2=day1; auto day2=day1;//這一行和上面那一行被註解掉的程式碼是等價的 day2.day=29; printf("高雄市立高雄高級中學園遊會\nday1=%d月%d日, day2=%d月%d日\n",day1.month,day1.day,day2.month,day2.day); return 0; }
執行結果 |
如果還是看不懂怎麼用,歡迎發問~
「for迴圈」的另類用法:
先備知識:1~12章的某些基本語法
功能:大幅簡化枚舉陣列或STL容器 (vector、set、map......等等) 的元素的迴圈
簡單舉例:
陣列版本:
#include<cstdio> int main() { int s[6]={0,2,4,0,0,5}; for(int element:s) { printf("%d\n",element); } return 0; }
執行結果 |
vector版本:
#include<cstdio> #include<vector> using namespace std; int main() { vector<int>s; s.push_back(0); s.push_back(2); s.push_back(4); s.push_back(0); s.push_back(0); s.push_back(5); for(int element:s) { printf("%d\n",element); } return 0; }
執行結果 |
set版本:
#include<cstdio> #include<set> using namespace std; int main() { set<int>s; s.insert(0); s.insert(2); s.insert(4); s.insert(0); s.insert(0); s.insert(5); for(int element:s) { printf("%d\n",element); } return 0; }
執行結果 |
map版本:
#include<cstdio> #include<map> using namespace std; int main() { map<char,int>s; s['B']=1; s['0']=9; s['5']=9; s['9']=8; s['0']=0; s['2']=4; s['0']=0; s['8']=1; s['3']=1; //for(pair<char,int> element:s) for(auto element:s)//這一行和上面那一行被註解掉的程式碼是等價的 /*看到auto了嗎? 電腦將會自動把auto替換為pair<char,int> 當你不知道element要用甚麼型別時特別好用*/ { printf("key=%c, value=%d\n",element.first,element.second); } return 0; }
執行結果 |
如果還是看不懂怎麼用,歡迎發問~
「匿名函式 (又稱Lambda、匿名運算式)」的用法:
先備知識:1~12章的某些基本語法
功能:可以在程式執行到一半的時候創造函式
簡單舉例:
#include<cstdio> int main() { auto Level=[](int a)->int { int answer=1; for(int i=1;i<=a;i++)answer=answer*i; return answer; }; for(int x=1;x<=6;x++) { printf("%d! = %d\n",x,Level(x)); } return 0; }
執行結果 |
這樣寫可以在不用幫函式取名 (注意到程式碼中找不到「Level」) 的條件下達成一模一樣的效果,這就是為甚麼這種東西被稱為「匿名函式」(沒有名字的函式) 的原因:
#include<cstdio> int main() { for(int x=1;x<=6;x++) { printf("%d! = %d\n",x,[](int a)->int { int answer=1; for(int i=1;i<=a;i++)answer=answer*i; return answer; }(x)); } return 0; }
執行結果 |
這是以上兩個範例中匿名函式的本體:
[](int a)->int
{
int answer=1;
for(int i=1;i<=a;i++)answer=answer*i;
return answer;
}
「中括號[]」寫出來放著就好
「小括號()」裡面放入引數 (甚麼是引數?)
「箭頭->」後面接回傳值 (甚麼是回傳值?) 的型別
「大括號{}」裡面放入函式的程式碼
就這樣
小中大括號都用到了耶!好記吧~XD
-----The End-----
關於C++11的好用語法就先介紹到這裡
如果還想要繼續更深入的研究,可以參考維基百科
下一頁 (這是最後一頁)
感謝:
(版權所有 All copyright reserved)
沒有留言:
張貼留言
歡迎留言或問問題~
若您的留言中包含程式碼,請參考這篇
如果留言不見了請別慌,那是因為被google誤判成垃圾留言,小莫會盡快將其手動還原
注意:只有此網誌的成員可以留言。