关于c++标准库、数量不定的模板参数、auto、范围for语句
Algorithms + Data Structure = Programs算法 + 数据结构 = 程序数量不定的模板参数(variadic templates)(Since C++11)template <typename T, typename... Types>//类型...void print(cosnt T& firstArg, const Type&...a
·
Algorithms + Data Structure = Programs
算法 + 数据结构 = 程序
数量不定的模板参数(variadic templates)
(Since C++11)
template <typename T, typename... Types>//类型...
void print(cosnt T& firstArg, const Type&...args){}//将参数分为一个和一包
…就是所谓的pack(包)
- 用于template parameters就是template parameters pack(模板参数包)
- 用于function parameter types就是function parameter types pack(函数参数类型包)
- 用于function parameter就是function parameters pack(函数参数包)
当包里最后一个42传入firstArg,则包里参数个数为0(因为下面输出firstArg,包里的每个参数依次传到firstArg,直到最后一个)
使得void print(const T& firstArg,const)无法被调用
下面的print调用的不是void print(const T& firstArg, const Type&…args)而应该重新写一个void print()与它并存
auto (since C++11)
list<string> c;//容器list,容器内的每个元素都是一个字符串
...
list<string>::iterator ite;//迭代器ite的类型是list<string>::iterator
ite = find(c.begin(),c.end(),target);
list<string> c;
...
//迭代器ite像指针那样,它指向find内的参数,find是算法
//返回类型auto这里等价于list<string>::iterator
auto ite = find (c.begin(), c.end(), target);
//错误写法
//auto ite;
//ite=find(c.begin(), c.end(), target);
ranged-base for范围for语句(since C++11)
for (decl : coll ){ //变量 : 容器
statement
}
举例:
for ( int i : { 2, 3, 5, 7, 9, 13, 17, 19 } ){
cout << i << endl;//容器中的值依次赋给i,并依次打印出
}
简化:
vector<double> vec;//容器内的元素均为double类型,容器名称vec
...
for ( auto elem : vec ) { //传值
cout << elem <<endl;
}
for ( auto& elem : vec ) { //传引用
elem *= 3;
}
传值
for ( auto elem : vec ){ //elem将容器vec中的元素逐一取出复制到elem,取一个输出一个.
cout << elem << endl;//如果3乘以elem,也不会影响vec内的元素的内容
//乘以3影响的是紫色边框的方块
}
传引用
for ( auto& elem : vec ) { //传引用相当于传指针
elem *= 3;//紫色的elem乘以3,影响vec中的元素的内容
}
更多推荐
已为社区贡献2条内容
所有评论(0)