數量不定的模板引數
宣告方式:
告訴編譯器.該函式接受模板引數 -> 兩組
-
第一組是
T
-
第二組是
args
-> 個數不確定.只有在傳入的時候才知道具體有幾個
呼叫程式碼:
原始碼裡面的print(args...)
,實際上會把args...
在傳給print
函式.進行遞迴列印
要知道後面的args
具體有幾個可以用方法sizeof...()
關鍵字auto
這是一個語法糖,由編譯器去自動推斷返回值型別
/*
在沒有關鍵字auto之前宣告型別
*/
list<string> c
list<string>::iterator ite;
ite = find(c.begin(), c.end(), target);
有了auto
關鍵字以後
list<string> c;
auto ite = find(c.begin(), c.end(), target); // 他就回去自動推斷find函式的返回型別
// auto不能拿來宣告變數型別,auto在使用的同時變數必須同時賦值 -> 以下就是錯誤的
list<string> c;
auto ite;
ite = find(c.begin(), c.end(), target);
ranged-base for
新的for
迴圈模式:
宣告形式:
for (decl : coll) {
statement;
}
for
的左邊必須宣告一個變數.右邊coll
必須是一個容器
編譯器會從右邊的容器coll
找出每一個元素.把每一個元素設定到左邊的變數上.然後去做下面的內容
這個寫法就不需要像之前的寫法一樣.找到容器的長度(類似forEach
)
示例程式碼:
vector<double> vec;
for (auto elem : vec)
{
cout << elem*3 << endl; // 傳遞的是值給到elem
}
如果elem
每一個*
3,不會影響到vec
裡面的內容.因為傳遞的是值
示例程式碼2
:
vector<double> vec;
for (auto& elem : vec)
{
elem *= 3; // 這裡就會影響到vec裡面的內容,因為傳遞的是引用 -> 指標地址
}