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();