0

以下问题分段错误执行方法我停在另一个问题中。

鉴于:

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. 但是,我怎样才能实现第二个选项?

4

4 回答 4

4

只需跳过该li = &(*absorbed)行,它应该可以正常工作。

于 2012-04-18T12:10:31.303 回答
3

您无法std::list<T>::iteratorT*. 您必须使用原始li版本来执行迭代器操作。

于 2012-04-18T12:11:33.923 回答
3

擦掉就行了!
如果您要删除它,则无需尝试重​​新输入值。

于 2012-04-18T12:11:41.440 回答
0

代替

// Now, absorbed should be deleted from list
li = & (* absorbed);
clusters.erase(li);

利用:

clusters.pop_front();

如果您总是处理第一个元素。

无法从值中获取迭代器。不是原因,但相同的值可以在多个容器中或多个容器中,而不是在一个容器中。

于 2012-04-18T12:25:40.387 回答