【问题标题】:Address Iterator item地址迭代器项
【发布时间】:2016-11-01 03:57:39
【问题描述】:

有一个顶点(顶点类)设置s,我想进入Vertice *addressset<Vertice>::iterator it引用的项目的地址。 换句话说,

address = &(*it);

但是,返回

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

有什么想法吗?

【问题讨论】:

  • it iterator 还是const_iterator?

标签: c++ iterator set const-iterator


【解决方案1】:

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

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

const Vertice* address = &(*it);

【讨论】:

  • 我需要 Vertice* 而不是 const。不可能吗?
  • 不能直接修改std::set的元素。为什么要Vertice*?你会做什么样的修改?
  • 此时未创建顶点*。这是一个类属性,之前已解决。但是,如果不可能,我会改变逻辑......
  • @WithoutNameZin 如果它应该指向std::set 的元素,那么它必须是const Vertice*。您仍然可以在其上调用 const 成员函数,但不能调用非常量成员函数并对其进行修改。如果要修改其内容,多半需要新建一个Vertice来替换std::set中原来的std::set
  • 我有一个顶点类,它有一个指向父顶点的指针。我需要通过构造函数传递父亲吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多