【问题标题】:How to write a generic function to compute recursive combination如何编写一个通用函数来计算递归组合
【发布时间】:2012-08-17 21:58:42
【问题描述】:

例如:

作为函数comb 的输入,得到2 个元素的组合将输出结果,,>,作为输入将获得相同的功能 ,>,,>,,>,作为同一个函数的输入会得到 ....

逻辑是一样的,只是类型改变,所以可以通用。 我试着写这样的东西:

template<typename V>
vector<vector<vector<V>::const_iterator>> comb(const vector<V>){
   ....

   while(next_combination(...))
   vector<vector<vector<V>::const_iterator>> results;
   return results;
}

vector<string> input
comb(comb(comb(input)));

但是编译器一直抱怨无法推断出返回值的类型。

谢谢。

【问题讨论】:

  • 您应该发布准确的代码(至少是模板的签名)和准确的错误代码。
  • @DavidRodríguez-dribeas 抱歉,代码已经搞砸了,为了完成我的工作,我已经将项目中的这些代码替换为几个快速脏梳功能。
  • 实际上,模板声明中的两个&gt; 之间应该需要一个空格。 &gt;&gt;&gt; &gt; 之间有区别。我想知道为什么你的编译器不抱怨。
  • 投票结束,没有真实代码编译器错误是不可能回答的,另外看来你不再需要(您可能想自己关闭问题)
  • @Papergay:如果使用C++11编译器,会处理得当。

标签: c++ generics recursion combinations


【解决方案1】:

也许以下会有所帮助:

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

注意变化:

  • comb的返回值是一个vectors的向量
  • comb 的参数不是const 因为next_combination 改变了它
  • comb里面有很多向量的拷贝;所有的复制似乎都是必要的

【讨论】:

  • 以上代码有效,谢谢。为什么我使用 const_iterator 是为了避免一次又一次地复制内容进行排列或组合,那部分 vector::const_iterator 似乎依赖于返回类型推导,这就是我的代码不起作用的原因.
猜你喜欢
  • 2015-03-04
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2017-10-08
相关资源
最近更新 更多