从指针获取迭代器

Get iterator from pointer

本文关键字:迭代器 获取 指针      更新时间:2023-10-16

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

鉴于:

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中删除元素。 但是,我怎样才能实现第二种选择呢?

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

您无法从T*获取std::list<T>::iterator。您必须使用原始li来执行迭代器操作。

只要抹掉它!
如果您无论如何都要删除它,则无需尝试重新输入值。

而不是

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

用:

clusters.pop_front();

如果始终处理第一个元素。

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