生成给定集的子集

时间:2012-03-06 14:38:16

标签: c++ vector

这是我为生成给定集合

的子集所做的努力
#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 ==========

我完全不理解错误,请帮助我,有什么不对?

7 个答案:

答案 0 :(得分:3)

您正在尝试将vector<int>推送回vector<int>容器......这没有任何意义。 您可以做的是将int推送到vector<int>容器。

我会将allsubset的定义从vector <int>改为vector< vector<int> >

答案 1 :(得分:3)

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

您尝试将vector<int>添加到vector<int>,这是非法的。

您希望allsubset成为vector<vector<int> >吗?

答案 2 :(得分:2)

问题在这里:

allsubset.push_back(子集);

子集是整数的向量。你不能把它推回另一个整数向量

答案 3 :(得分:2)

错误是由这行代码引起的:

allsubset.push_back(subset); 

正在尝试将vector<int>视为int

更改allsubset,并将getsubset()的值返回到:

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

    ...
    return allsubset;
}

答案 4 :(得分:2)

我不确定编译器错误,但allsubset.push_back(subset);行肯定是错误的 - allsubsetvector<int>,而不是vector< vector<int> >

答案 5 :(得分:2)

错误就在这一行:

allsubset.push_back(subset);

由于allsubset.push_back()需要int,您才会收到错误,因为subset的类型为vector<int>

答案 6 :(得分:1)

代码中的主要问题是您尝试使用与原始集相同的数据结构来表示所有子集。一组所有子集将是整数向量的向量,而不是整数的简单向量。

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

正确复数变量名称是个好主意,例如

  • getsubset应该是getsubsets
  • allsubset应该是allsubsets