Я видел некоторые сообщения о недопустимых итераторах после объединения списков, но не смог найти что-то, чтобы решить проблему. Я пишу рутину
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 кластер
Задача ещё не решена.
Других решений пока нет …