std :: list сплайсинг делает недействительным итератор

Я видел некоторые сообщения о недопустимых итераторах после объединения списков, но не смог найти что-то, чтобы решить проблему. Я пишу рутину

    for (KLUSTER::iterator iter = neighbours.begin(); iter != neighbours.end(); ++iter)
{
if (!(*iter).checked)
{
(*iter).checked = true;
KLUSTER moreneighbours = T.RegionQuery(&(*iter), ClusterId);
if (moreneighbours.size() >= DBS_MINPTS)
{
(*iter).ClId = *ClusterId;
neighbours.splice(neighbours.end(), moreneighbours);    // ****
}

}
if ((*iter).ClId == DBS_UNCLAS)
{
(*iter).ClId = *ClusterId;

AddToCluster(cluster, &(*iter));
}
}

Линия соединения помечена // ****
Если я это закомментирую, цикл останавливается.
Если я не закомментирую это, цикл не остановится. Кто-нибудь знает, чем я увлекся, пожалуйста?

Заранее спасибо.

Постскриптум Я знаю, как обойти это, но я не знаю, правильно ли я это делаю.

P.P.S. Забыл добавить typedef std :: list kluster; и #define KLUSTER кластер

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]