c++面向对象高级编程 学习十三 数量不定的模板参数,auto,for

本文介绍了C++的高级特性,包括如何使用数量不定的模板参数进行编程,详细讲解了模板参数包在不同场景的应用。此外,还探讨了auto关键字在自动类型推导中的作用,以及ranged-based for循环的语法和使用示例,帮助读者深入理解C++的现代编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数量不定的模板参数

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值