声明和使用自定义类向量

时间:2017-10-26 08:55:09

标签: c++ class object vector

我和我的伙伴刚刚遇到了一个我们无法解决的问题。

我们有两个班级,solutiongeneration

solution有很多属性,generation包含vector<solution> pool属性。

生成类具有generatePool函数:

void generation::generatePool(int initsize){
  for(int i = 0; i < initsize; i++){
    printf("%d\n", i);
    pool.push_back(get_randomized_solution(args));
  }
}

其中get_randomized_solution本身返回一个解决方案。问题是,程序编译但在push_back

崩溃(分段错误)

我们已经在resize向量上尝试了reservepool,我们也尝试使用指针...但它仍然崩溃,现在google(和SO)似乎已经消失了出于帮助我们的想法。我们还重新定义了solution& solution::operator=(const solution&)solution::solution()(没有参数)构造函数,它基本上返回一个空的solution。您认为问题来自哪里?

编辑:

以下是get_randomized_solution方法:

solution get_randomized_solution(int size, int rcap, int rcom, bool randomized){
  solution sol = solution(size, rcap, rcom);

  vector< pair<int,int> > cibles;
  for(int i = 0; i < size; i++){
    for(int j = (i==0) ? 1 : 0; j < size; j++){
      cibles.push_back(make_pair(i, j));
    }
  }

  srand(rand());
  if(randomized) random_shuffle(cibles.begin(), cibles.end());

  for(int k = 0; k < cibles.size(); k++){
    if(sol.removeCaptor(cibles[k])){
      if(!sol.realisable()){
        sol.addCaptor(cibles[k]);
      }
    }
  }
  return sol;
}

更完整的代码:https://codeshare.io/2jLnzB

1 个答案:

答案 0 :(得分:0)

那确实是get_random_solution,其中有size = size行导致了这个bug。非常抱歉没用的帖子。