以下问题Segmentation fault executing method我停在另一个问题。从指针获取迭代器
考虑:
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);
试图做的上述相反,但G ++返回一个错误:error: no match for 'operator=' in 'li = absorbed'
我怎样才能做到这一点?
我试图避免循环遍历列表中的所有元素再次找到absorbed
之一。
编辑:
很抱歉,但我知道我错过了说,经过absorbed = &(* li);
li
继续循环,直到clusters.end()
。 因此,在周期结束时,li
不再指向absorbed
了。 我想我有两个选择:要么我再次循环通过clusters
中的所有元素来找到absorbed
元素;或者我利用absorbed
指针擦除clusters
中的元素。但是,我怎样才能实现第二种选择呢?