генерировать подмножество данного набора - PullRequest
1 голос
/ 06 марта 2012

Вот мои усилия для генерации подмножества данного набора

#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 ]

3 голосов
/ 06 марта 2012

Вы пытаетесь переместить vector<int> в vector<int> контейнер ... это не имеет смысла.То, что вы можете сделать, это нажать int на vector<int> контейнер.

Я бы исправил определение allsubset с vector <int> до vector< vector<int> >

3 голосов
/ 06 марта 2012
vector<int>allsubset;
vector<int> subset;
allsubset.push_back(subset);  

Вы пытаетесь добавить vector<int> к vector<int>, что недопустимо.

Хотите, чтобы allsubset было vector<vector<int> >?

2 голосов
/ 06 марта 2012

Ошибка в этой строке:

allsubset.push_back(subset);

, поскольку allsubset.push_back() требует int, вы получаете ошибку, потому что subset имеет тип vector<int>

2 голосов
/ 06 марта 2012

Я не уверен насчет ошибки компилятора, но строка allsubset.push_back(subset); определенно неверна - allsubset - это vector<int>, а не vector< vector<int> >.

2 голосов
/ 06 марта 2012

Ошибка вызвана этой строкой кода:

allsubset.push_back(subset); 

, поскольку он пытается обработать vector<int> как int.

Изменить allsubset и вернуть значение getsubset() на:

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

    ...
    return allsubset;
}
2 голосов
/ 06 марта 2012

проблема здесь:

allsubset.push_back (подмножество);

подмножество - вектор целых чисел. Вы не можете вернуть его в другой вектор целых чисел

1 голос
/ 06 марта 2012

Основная проблема в вашем коде состоит в том, что вы пытаетесь представить все подмножества, используя ту же структуру данных, что и исходный набор.Набор всех подмножеств будет вектором векторов целых, а не простым вектором целых чисел.

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

Хорошей идеей будет правильное умножение имен переменных, например

  • getsubset должен быть getsubsets
  • allsubset должен быть allsubsets
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...