2010-05-22 5 views
2

Hey fondamentalement Im essayant de stocker une "solution" et de créer un vecteur de ceux-ci. Le problème que j'ai est avec l'initialisation. Heres ma classe pour référenceinitialisation d'un vecteur de classe personnalisée en C++

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) ou Solution(2, 5) travail et initalizes tout, mais j'ai besoin X de ces objets de solution. std::vector<Solution> Parents(X) va créer des solutions X avec le constructeur par défaut et je veux construire en utilisant le constructeur (int, int). Existe-t-il un moyen simple (un seul recouvrement?) De le faire? Ou devrais-je faire quelque chose comme:

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); 
    } 
+0

vous pouvez initialiser à la valeur comme ceci: 'vecteur (taille, Solution (21, 0));' pour la référence http://www.cplusplus.com/reference/stl/ vecteur/vector/ – Anycorn

+0

merveilleux, merci c'est exactement ce que je voulais. – Flamewires

+0

@aaa, aurait dû être une réponse ... – Kiril

Répondre

1

L'exemple que j'ai donné comme commentaire utilise un constructeur de copie pour créer de nouveaux objets. Vous pouvez effectuer les opérations suivantes:

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

cependant être prudent, car vous n'allez avoir une copie exacte de l'objet/construire si vous introduisez la génération aléatoire dans votre constructeur de copie, soit Solution y = x; y != x

votre meilleure solution est quelque chose comme vous avez déjà à mon avis

+0

hm bien, merci, je pourrais juste le garder tel quel. – Flamewires

1

J'ai utilisé le Boost assignment library pour des tâches comme celui-ci. Vous pouvez le trouver utile ....

+0

J'utilise déjà la bibliothèque de threads boost dans ce programme – Flamewires