Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从指针获取迭代器_C++_Pointers_Iterator - Fatal编程技术网

C++ 从指针获取迭代器

C++ 从指针获取迭代器,c++,pointers,iterator,C++,Pointers,Iterator,下面的问题我在另一个问题中停了下来 鉴于: 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);

下面的问题我在另一个问题中停了下来

鉴于:

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);
集群*base;
簇*被吸收;
list::iterator li=clusters.begin();
//然后李被指向某个元素。
吸收=&(*li);//获取指向所选元素的指针。
基本->连接群集(已吸收);//专心地做动作。
//li继续循环,现在指向集群
//现在,应该从列表中删除这些内容。李不再指专注。
li=&(*吸收);
簇。擦除(li);
尝试执行与上述相反的操作,但g++返回一个错误:
error:与'li=absolved'中的'operator='不匹配。
我该怎么做

我试图避免循环遍历列表中的所有元素,以再次找到被吸收的
元素

编辑:

抱歉,但我理解我在
absolved=&(*li)之后没有说这句话
li
继续循环,直到
clusters.end()
。 因此,在周期结束时,
li
不再指向
absolved

我想我有两个选择:要么我再次循环遍历
集群中的所有元素
,找到
吸收的
元素;或者我利用
指针从
集群中删除元素。但是,我怎样才能实现第二个选择呢

只需跳过
li=&(*吸收)
行,它就可以正常工作。

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

只需删除它
如果仍要删除某个值,则无需尝试重新输入该值。

而不是

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

如果总是处理第一个元素

无法从值中获取迭代器。原因并非如此,但相同的值可以在多个容器中,也可以在一个容器中多次

clusters.pop_front();