文章目錄
- 數量不定的模板參數
- auto
- ranged-base for
數量不定的模板參數
void print() {}
//... 表示參數的數量不定
template<typename T, typename...Types>
void print(const T&firstArg, const Types&...args) {cout << firstArg << endl;cout<<"args參數的個數為:"<<sizeof...(args)<<endl;//sizeof...(args)計算參數的個數print(args...);//此處firstArg是一個參數,args參數不定,調用print(args...)將args分為兩組:一個參數和多個參數,進行遞歸//當args沒有參數時,即0個參數時,調用 print()
}
//測試函數如下
int main()
{print(7.5,"hello",42,"nihao");system("pause");return 0;
}
輸出結果為:
7.5
args參數的個數為:3
hello
args參數的個數為:2
42
args參數的個數為:1
nihao
args參數的個數為:0
…就是一個所謂的pack(包)
用于template parameters,就是template parameters pack(模板參數包)
用于function parameter types,就是function parameter types pack(函數參數類型包)
用于function parameters,就是function parameters pack(函數參數包)
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);
ranged-base for
語言規則:
for(decl:coll){statement
}
//decl是變量,coll是容器,將容器中的變量依次賦值給decl
示例1:
for(int i:{1,3,5,6}){cout<<i<<endl;
}
//輸出結果為:
1
3
5
6
示例2:
vector<double>vec;
...
//值傳遞,不改變容器中的值
for(auto elem:vec){cout<<elem<<endl;
}
//引用傳遞,可改變容器中的值
for(auto& elem:vec){elem*=3;
}