C++可变参数模板

在python中,支持可变参数作为函数形参,这是一项很好的功能(代码段1),那么在C++中有没有这样的方式支持可变参数呢。这里提供两种实现方式以供参考。其中方式1支持多种类型可变参数输入,方式2更简洁,但是不支持多种参数类型输入。

python中可变参数:

python 复制代码
def average(*x):
    if len(x) == 0:
        return 0
    return sum(x) / len(x)

x1,x2,x3,x4=map(eval,input().split())
b=average(x1,x2)
print('两个数平均值为:{:.2f}'.format(b))
b=average(x1,x2,x3)
print('三个数平均值为:{:.2f}'.format(b))
b=average(x1,x2,x3,x4)
print('四个数平均值为:{:.2f}'.format(b))

C++中可变参数实现1:

使用递归+可变参数模板展开

这里之所以定义两个可变参数是为了每次递归展开可变参数包中第一个,剩余在后续递归展开。也就是为了防止程序无限递归

cpp 复制代码
//C++11
template<typename T, typename... Args>
double average(T first, Args... args) {
    return (first + (sizeof...(args) * average(args...))) / (sizeof...(args) + 1);
}

C++中可变参数实现2:

使用初始化列表,这种方式更为简洁,但是不适用于不同类型参数。

cpp 复制代码
double average(std::initializer_list<double> numbers) {
    if (numbers.size() == 0) return 0.0;
    
    double sum = 0.0;
    for (double num : numbers) {
        sum += num;
    }
    return sum / numbers.size();
}
相关推荐
MoRanzhi12033 小时前
Pillow 基础图像操作与数据预处理
图像处理·python·深度学习·机器学习·numpy·pillow·数据预处理
素素.陈3 小时前
向RAGFlow中上传文档到对应的知识库
开发语言·python
小宁爱Python3 小时前
Django Web 开发系列(一):视图基础与 URL 路由配置全解析
后端·python·django
空影星3 小时前
SiriKali,一款跨平台的加密文件管理器
python·编辑器·电脑·智能硬件
阿_旭4 小时前
基于深度学习的甲状腺结节智能检测分割与诊断系统【python源码+Pyqt5界面+数据集+训练代码】
人工智能·python·深度学习·甲状腺结节检测
woshihonghonga4 小时前
PyTorch矩阵乘法函数区别解析与矩阵高级索引说明——《动手学深度学习》3.6.3、3.6.4和3.6.5 (P79)
人工智能·pytorch·python·深度学习·jupyter·矩阵
AI云原生5 小时前
云原生系列Bug修复:Docker镜像无法启动的终极解决方案与排查思路
运维·服务器·python·docker·云原生·容器·bug
万粉变现经纪人7 小时前
如何解决 pip install -r requirements.txt 私有索引未设为 trusted-host 导致拒绝 问题
开发语言·python·scrapy·flask·beautifulsoup·pandas·pip
qq_479875437 小时前
C++ std::Set<std::pair>
开发语言·c++