从指针获取迭代器
Get iterator from pointer
以下问题 分段错误执行方法 我在另一个问题中停止了。
鉴于:
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();
如果始终处理第一个元素。
无法从值中获取迭代器。不是原因,但相同的值可以在多个容器中,也可以在一个容器中多个。
相关文章:
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 如何在C++中仅获取容器内类成员的迭代器
- C++如何获取传递给函数(STL 迭代器)的参数的名称
- 从 QMap<K、T> 获取 Java 样式迭代器,而不指定 T、K
- 获取 c++ 中具有恒定长度的数组的迭代器
- 使用列表迭代器获取所有值
- 如何从迭代器获取列表
- 使用迭代器获取字符串中的短语
- 从数组列表中的字符串迭代器获取 int dat<struct>
- 通过迭代器获取 set 元素的"index"
- 从迭代器获取索引处的元素
- 从boost::property_tree::ptree::迭代器获取ptree
- 从输入迭代器获取最后一项
- Boost:: Dijkstra 最短路径,如何从路径迭代器获取顶点索引
- 使用迭代器获取映射中与条件匹配的每个项
- 使用临时程序将迭代器获取到STL容器时的细微错误:如何避免
- unique_ptr unordered_map:无法从迭代器获取价值
- 防止自定义迭代器获取nullptr
- 无法使用自定义迭代器获取std::find_if进行编译