Address迭代器项

Address Iterator item

本文关键字:迭代器 Address      更新时间:2023-10-16

有一个顶点(顶点类)集s,我想在Vertice *address中得到set<Vertice>::iterator it引用的项目的地址。换句话说,

address = &(*it);

但是返回

error: assigning to 'Vertice *' from incompatible type
      'const value_type *' (aka 'const Vertice *')

任何想法?

std::set中保存的元素不可修改,std::set::iterator也是常量迭代器。这意味着对于&(*it),你将得到一个指向const(即const Vertice*)的指针,而不能分配给指向非const(即Vertice*)的指针。

可以将address的类型更改为const Vertice*

const Vertice* address = &(*it);

set中的条目不能被外部代码改变(允许它可能违反set的不变量)。如果你想要一个直接指针(你不应该),它需要是const Vertice*(安全的,非突变的),而不是Vertice*(这可能会改变set中的条目)。这就是错误告诉你的