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; }