如何在这个递归中实现向量?

时间:2017-04-23 17:06:48

标签: c++ recursion vector

我是新手,所以我可能会遗漏一些东西。我目前有这些代码:

#include <iostream>

template<int ...> struct mySum;
template<>struct
mySum<> {
    static const int value = 0;
};
template<int i, int ... tail> struct
mySum<i, tail...> {
    static const int value = i + mySum<tail...>::value;
};
int sum = mySum<1, 2, 3, 4, 5, 6, 7, 8>::value;

int main() {
    std::cout << sum << std::endl;

    return 0;
}

正如您所看到的,我使用递归来将值的总和作为整数。如何修改此代码以接受向量并返回向量?

例如,我想将整个向量乘以2。

<1,2> 1,2,3,4将返回2,4,6,8等...

或者有更好的方法递归地执行此操作吗?

编辑:模板内容不是必需的。只有递归。我只是认为可以用模板做到这一点......

1 个答案:

答案 0 :(得分:-2)

如果要以递归方式执行此操作,则必须使用函数int sum(...);(包括&lt; stdarg.h&gt;)。 (它被命名为可变函数)

模板只是避免重写事物的一种方法:在编译期间替换所有模板内容:编译后,模板不再存在。

因为模板是在编译时确定的,所以只能在编译时使用已知的表达式(常量表达式)。 根据定义,矢量不是常数,因此不能在模板中使用。