2012-03-06 81 views
1

这是我努力的生成子集的给定机构产生的给定集合的子集

#include <cstdlib> 
#include <iostream> 
#include<vector> 
using namespace std; 

vector<int> getsubset(vector<int> &sets) 
{ 

     vector<int>allsubset; 
     int max=1<<sets.size(); 
     for (int i=0;i<max;i++){ 
      vector<int> subset; 
      int j=i; 
      int index=0; 
      while(j>0){ 
      if ((j&1)>0) 
      subset.push_back(sets[index]); 
      j>>=1; 
      index++;  




        } 


       allsubset.push_back(subset);   

      } 

     return allsubset; 
     } 
int main(int argc, char *argv[]) 
{ 
    return 0; 
} 

但这里是错误

1>------ Build started: Project: subset, Configuration: Debug Win32 ------ 
1> subset.cpp 
1>c:\users\daviti\documents\visual studio 2010\projects\subset\subset\subset.cpp(27): error C2664: 'void std::vector<_Ty>::push_back(_Ty &&)' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'int &&' 
1>   with 
1>   [ 
1>    _Ty=int 
1>   ] 
1>   Reason: cannot convert from 'std::vector<_Ty>' to 'int' 
1>   with 
1>   [ 
1>    _Ty=int 
1>   ] 
1>   No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

,我不明白的错误完全,请帮帮我,什么是错的?

+0

请避免剧烈变化。问一个新问题。 – 2012-03-06 16:12:35

回答

2

问题是在这里:

allsubset.push_back(subset);

子集是一个整数向量。您无法将其重新整合到另一个整数向量中

3

您试图将vector<int>推回到vector<int>容器......这没有任何意义。 您可以做的是将int推送到vector<int>容器。因为它正试图把一个vector<int>作为int

allsubset.push_back(subset); 

我就从vector <int>的的allsubset定义修正为vector< vector<int> >

2

错误是由该行代码引起的。

变化allsubset,和getsubset()返回值,到:

vector<vector<int> > getsubset(vector<int> &sets) 
{ 
    vector<vector<int> > allsubset; 

    ... 
    return allsubset; 
} 
+0

但是如何返回? – 2012-03-06 14:54:48

+0

只是'返回allsubset;':但改变'allsubset'的类型和返回类型'getsubset()'。 – hmjd 2012-03-06 15:03:07

+0

我已更改,但它不起作用,运行时错误,我能做什么? – 2012-03-06 15:09:36

2

我不知道的编译器错误,但allsubset.push_back(subset);线肯定是错误的 - allsubsetvector<int>,而不是一个vector< vector<int> >

1

你的代码中的主要问题是你试图用与原始数据结构相同的数据结构来表示所有的子集。所有子集的集合将是一个整数向量的向量,而不是一个整数的整数向量。

vector< vector<int> > getsubset(vector<int> &sets) { 
    vector< vector<int> > allsubset; 
    // your code here... 
    return allsubset; 
} 

这是一个好主意,正确复数化的变量名,例如

  • getsubset应该getsubsets
  • allsubset应该allsubsets
2

的错误是这行:

allsubset.push_back(subset); 

因为allsubset.push_back()需要int你得到的错误,因为subset的类型是vector<int>

3
vector<int>allsubset; 
vector<int> subset; 
allsubset.push_back(subset); 

你试图将vector<int>添加到vector<int>,这是违法的。

你想allsubsetvector<vector<int> >