2010-05-22 3 views
2

Эй, в основном, я пытаюсь сохранить «решение» и создать вектор из них. У меня проблема с инициализацией. Heres мой класс для справкиИнициализация вектора пользовательского класса в 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) или Solution(2, 5) работы и initalizes все, но мне нужно 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); 
    } 
+0

вы можете инициализировать значение следующим образом: 'vector (size, Solution (21, 0));' для справки http://www.cplusplus.com/reference/stl/ вектор/вектор/ – Anycorn

+0

замечательный, спасибо, что именно я хотел. – Flamewires

+0

@aaa, должен был быть ответом ... – Kiril

ответ

1

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

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

Однако будьте осторожны, так как вы больше не будете иметь точную копию объекта/построить, если вы приведете генерацию случайных чисел в конструкторе копирования, т.е. Solution y = x; y != x

ваше самое лучшее решение что-то вроде у вас уже есть на мой взгляд

+0

hm, спасибо. Я могу просто сохранить ее как есть. – Flamewires

1

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

+0

. Я рассмотрю это как Я уже использую библиотеку ускорения потоков в этой программе – Flamewires

Смежные вопросы