c++ 函数使用可变参数

例子一:
#include <iostream>

// 递归终止函数
void print() {
    std::cout << std::endl;
}

// 递归函数模板,打印第一个参数并递归打印剩余参数
template <typename T, typename... Args>
void print(T first, Args... args) {
    std::cout << first << " ";
    print(args...);
}

int main() {
    print(1, 2.5, "Hello", 3.14f);
    return 0;
}

在上面的示例中,我们定义了一个名为 print 的函数模板,该模板使用可变参数模板来实现参数数量可变的功能。在 print 函数模板中,我们首先定义了一个递归终止函数 print,它不接受任何参数并在递归到最后一个参数后结束。然后,我们定义了一个模板函数 print,它接受一个参数 first 和一个参数包 Args...,并递归地打印参数 first 并调用自身来处理剩余的参数。
例子二:

#include <iostream>
#include <initializer_list>

// 使用 initializer_list 实现可变参数求和
int sum(std::initializer_list<int> args) {
    int result = 0;
    for (int value : args) {
        result += value;
    }
    return result;
}

int main() {
    std::cout << sum({1, 2, 3, 4, 5}) << std::endl;  // 输出 15
    std::cout << sum({10, 20, 30}) << std::endl;     // 输出 60
    return 0;
}

在上面的示例中,我们定义了一个 sum 函数,它接受一个 std::initializer_list<int> 作为参数,这个参数允许我们传递一个整数列表作为参数。在 sum 函数中,我们使用了 for 循环来遍历列表中的所有值,并计算它们的总和。

在 main 函数中,我们使用了 sum 函数来计算不同列表中所有整数的总和。通过使用 std::initializer_list,我们可以实现函数参数为可变参数的功能。

这个例子展示了另一种使用可变参数的方式,通过使用 std::initializer_list 来实现函数参数为可变参数的功能。

 

如果 可变参数为 std::vector:

#include <iostream>
#include <vector>

int sum(const std::vector<int>& values) {
    int result = 0;
    for (int value : values) {
        result += value;
    }
    return result;
}

int main() {
    std::vector<int> vec1 = {1, 2, 3, 4, 5};
    std::vector<int> vec2 = {10, 20, 30};

    std::cout << sum(vec1) << std::endl;  // 输出 15
    std::cout << sum(vec2) << std::endl;  // 输出 60

    return 0;
}

 

posted @ 2024-01-12 11:23  SusieSnail_SUN  阅读(24)  评论(0编辑  收藏  举报