Я хочу выполнить BFS на дереве, чтобы узнать какой-то лист, но график динамичен по своей природе, когда я приземляюсь на лист, и этот лист не тот, который я ищу, тогда его дети вычисляются из листа (лист больше не является листом, это узел). Как добавить элементы в вектор и пройти его одновременно?
Я пробовал две реализации, и оба производили жуткие результаты. Я думаю, что указатели становятся недействительными или это неправильная реализация. Мой код выглядит следующим образом
int y=0;
while(graph.end() - graph.begin() < 262145 and graph.end() - graph.begin() < y){
if(found(graph[y])){
clock2 = graph[y];
break;
}
else{
if(graph[y].b[0] < 4) graph.push_back(move1(graph[y]));
if(graph[y].b[1] < 4) graph.push_back(move2(graph[y]));
}
y++;
}
и следующая реализация была что-то вроде этого
for(vector<foo> :: iterator i = graph.begin();i!=graph.end();i++){
if(found(*i)){
clock2 = *i;
break;
}
else{
if(i->b[0] < 4) graph.push_back(move1(*i));//move1 and move2 are
if(i->b[1] < 4) graph.push_back(move2(*i));//functions of return type foo
}
}
Оба они вызывают программа аварии. Что с ними не так, как их реализовать? Прокомментируйте с дополнительными запросами.
возможного дубликат [итераторы правило о недостоверности] (Http: // stackoverflow.com/questions/6438086/iterator-invalidation-rules) – Scis
Вы не можете использовать вектор, так как определенные вставки могут привести к недействительности итераторов, скажем, когда размер превышает емкость. – Coder777
В первом фрагменте это выглядит не так: 'graph.end() - graph.begin() <= y'. – laune