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();
}
相关推荐
默_笙1 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003961 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技1 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读1 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时1 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
C语言小火车1 天前
C/C++ 为什么需要编译器?
开发语言·c++
奇思妙想聪明勤奋的小羊1 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1231 天前
2026年第38周GitHub趋势周报
python·科技·github