инициализация вектора пользовательского класса в C ++ - PullRequest
2 голосов
/ 22 мая 2010

Эй, в основном я пытаюсь сохранить «решение» и создать вектор из них. У меня проблема с инициализацией. Вот мой класс для справки

class Solution
{
private:
      //  boost::thread m_Thread;
        int itt_found;
        int dim;
        pfn_fitness f;
        double value;
        std::vector<double> x;
public:

        Solution(size_t size, int funcNo) : itt_found(0), x(size, 0.0), value(0.0), dim(30), f(Eval_Functions[funcNo])
        {
            for (int i = 1; i < (int) size; i++) {
                x[i] = ((double)rand()/((double)RAND_MAX))*maxs[funcNo];
            }
        }

        Solution() : itt_found(0), x(31, 0.0), value(0.0), dim(30), f(Eval_Functions[1])
        {
            for (int i = 1; i < 31; i++) {
                x[i] = ((double)rand()/((double)RAND_MAX))*maxs[1];
            }
        } 
        Solution operator= (Solution S) 
        {
            x = S.GetX();
            itt_found = S.GetIttFound();
            dim = S.GetDim();
            f = S.GetFunc();
            value = S.GetValue();
            return *this;
        }
        void start()
        {
            value = f (dim, x);
        }
        /* plus additional getter/setter methods*/
}

Solution S(30, 1) или Solution(2, 5) работают и все инициализируют, но мне нужно X этих объектов решения. std::vector<Solution> Parents(X) создаст X-решения с конструктором по умолчанию, и я хочу создать с помощью конструктора (int, int). Есть ли простой (один лайнер?) Способ сделать это? Или мне нужно сделать что-то вроде:

size_t numparents = 10;
vector<Solution> Parents;
    Parents.reserve(numparents);
    for (int i = 0; i<(int)numparents; i++) {
        Solution S(31, 0);
        Parents.push_back(S);
    }

Ответы [ 2 ]

1 голос
/ 22 мая 2010

пример, который я привел в качестве комментария, использует конструктор копирования для создания новых объектов. Вы можете сделать следующее:

// override copy constructor
Solution(const Solution &solution) {
... copy from another solution
}

однако будьте осторожны, поскольку у вас больше не будет точной копии / конструкции объекта, если вы введете случайную генерацию в конструкторе копирования, т.е.

На мой взгляд, ваше лучшее решение - это то, что вы уже имеете

1 голос
/ 22 мая 2010

Я использовал библиотеку назначений Boost для подобных задач. Вы можете найти это полезным ....

...