Следующий вопрос Segmentation fault executing method Я остановился в другой проблеме.Получить итератор от pointer
Дано:
Cluster * base;
Cluster * absorbed;
list<Cluster>::iterator li = clusters.begin();
// li is then pointed to some element.
absorbed = &(*li); // Get a pointer to the chosen element.
base->joinCluster(absorbed); // Perform an action with absorbed.
// li contines the cycle and now point to clusters.end()
// Now, absorbed should be deleted from list. li doesn't point to absorbed anymore.
li = & (* absorbed);
clusters.erase(li);
Пытался сделать реверс выше, но г ++ возвращает ошибку: error: no match for 'operator=' in 'li = absorbed'
Как я могу это сделать?
Я стараюсь избегать циклического перехода по всем элементам в списке, чтобы снова найти absorbed
.
Edit:
Извините, но я понимаю, что я пропустил, чтобы сказать, что после absorbed = &(* li);
li
продолжает цикл до clusters.end()
. Итак, в момент окончания цикла li
больше не указывает на absorbed
. Я думаю, у меня есть два варианта: либо я снова повторяю все элементы в clusters
, чтобы найти элемент absorbed
; Или я использую указатель absorbed
для стирания элемента с clusters
. Но как я могу достичь этого второго варианта?