地址迭代器项目

时间:2016-11-01 03:57:39

标签: c++ iterator set const-iterator

将Vertice(Vertex类)设置为s,我想进入Vertice *address set<Vertice>::iterator it引用的项目的地址。 换句话说,

address = &(*it);

但是,返回

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

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

std::set中保存的元素不可修改,std::set::iterator也是const迭代器。这意味着对于&(*it),您将获得指向const(即const Vertice*)的指针,该指针不能分配给指向非const的指针(即Vertice*)。 / p>

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

const Vertice* address = &(*it);

答案 1 :(得分:0)

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