我和我的伙伴刚刚遇到了一个我们无法解决的问题。
我们有两个班级,solution
和generation
。
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
向量上尝试了reserve
和pool
,我们也尝试使用指针...但它仍然崩溃,现在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
答案 0 :(得分:0)
那确实是get_random_solution,其中有size = size
行导致了这个bug。非常抱歉没用的帖子。