C++ 如何编写泛型函数来计算递归组合

C++ 如何编写泛型函数来计算递归组合,c++,generics,recursion,combinations,C++,Generics,Recursion,Combinations,例如: 作为对函数的输入,梳取2个元素的组合将输出结果,这作为对同一函数的输入将得到 或许以下几点会有所帮助: template <typename T> vector<vector<T> > comb(vector<T> v) { vector<vector<T> > result; // may want to sort the input vector before iterating over the

例如:

作为对函数的输入,梳取2个元素的组合将输出结果,这作为对同一函数的输入将得到
或许以下几点会有所帮助:

template <typename T>
vector<vector<T> > comb(vector<T> v)
{
    vector<vector<T> > result;
    // may want to sort the input vector before iterating over the combinations
    do {
        result.push_back(v);
    } while (next_combination(...));
    return result;
}
模板
向量梳(向量v)
{
矢量结果;
//可能需要在迭代组合之前对输入向量进行排序
做{
结果:推回(v);
}while(next_组合(…);
返回结果;
}
注意这些变化:

  • comb
    的返回值是向量的向量
  • comb
    的参数不是
    const
    ,因为
    next\u组合
    改变了它
  • comb
    中有很多向量的复制;所有这些复制似乎都是必要的

你应该发布准确的代码(至少是模板的签名)和准确的错误代码。@DavidRodríguez dribeas抱歉,代码已经搞乱了,我的工作完成了,我已经在我的项目中将这些代码替换为几个快速脏梳函数。实际上,在模板声明中,模板内部的两个
之间应该需要一个空格。
>
>
之间有区别。我想知道为什么你的编译器没有抱怨。投票关闭,没有真正的代码和编译器错误是不可能回答的,而且你似乎不再需要(你可能想自己关闭这个问题)@Papergay:如果使用C++11编译器,它将被正确处理。上面的代码工作正常,谢谢。我使用const_迭代器的原因是为了避免一次又一次地复制内容进行排列或组合,part vector::const_迭代器似乎依赖于返回类型推断,这就是我的代码不起作用的原因。
template <typename T>
vector<vector<T> > comb(vector<T> v)
{
    vector<vector<T> > result;
    // may want to sort the input vector before iterating over the combinations
    do {
        result.push_back(v);
    } while (next_combination(...));
    return result;
}