在c ++中初始化自定义类的向量

时间:2010-05-22 01:43:32

标签: c++ constructor vector initialization

嘿基本上我试图存储“解决方案”并创建这些的矢量。我遇到的问题是初始化。以下是我的课程供参考

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 个答案:

答案 0 :(得分:1)

我使用Boost assignment library执行此类任务。你可能会发现它很有用......

答案 1 :(得分:1)

我作为注释提供的示例使用复制构造函数来创建新对象。 您可以执行以下操作:

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

但要小心,因为如果在复制构造函数中引入随机生成,则不再具有精确的对象复制/构造,即Solution y = x; y != x

你最好的解决方案就像你在我看来已经拥有的那样