【问题标题】:How to enhance-iterate by reference over an array element that's of type set (STL) of user-defined objects?如何通过引用对用户定义对象的类型集(STL)的数组元素进行增强迭代?
【发布时间】:2017-12-09 03:04:10
【问题描述】:

necklace 是一个 c 数组,由 std::set<Pearl> 的元素组成,其中 Pearl 是用户定义的类型。

necklace定义如下

std::set<Pearl> necklace[NUM_CIRC] = { };

在此之后,元素将填充Pearl's。

下面的sn-p

for (Pearl &p : necklace[circular_coordinate]) {
    p.set_color("white");
}

导致编译错误

“Pearl&”类型的引用初始化无效 'const Pearl' 类型的表达式

如何以非常量方式访问necklace[circular_coordinate]

【问题讨论】:

标签: c++ c++11 compiler-errors stl constants


【解决方案1】:

不幸的是,std::set 元素是不可变的。这意味着,您不能通过设计更改它们。

原因与 std::setstd::map 中的不可变键相同 - 更改键可能会导致键之间的顺序发生变化,关联容器不支持这种情况。

【讨论】:

  • 谢谢。你对允许修改成员的替代容器有什么建议吗?我不想分配一个二维数组来节省内存(一些位置有大量珍珠,而另一些只有 1 个)。
  • @WuschelbeutelKartoffelhuhn 为什么不是简单的vectorlist?如果您需要更准确的建议,则需要细化您的要求。
  • 谢谢。 IIRC 向量最初为 10 个成员分配内存(尽管可能会更改),所以我将使用列表(我假设是 LL)。反正我不需要 O(1) 成员访问权限。
  • @WuschelbeutelKartoffelhuhn std::vector 有一个构造函数,它将所需的初始元素数量作为参数。这对你的情况很有用。此外,在您不需要随机删除的几乎所有种情况下,std::vector 优于 std::list
  • @WuschelbeutelKartoffelhuhn 如果您不确定除了std::vector 之外还需要其他任何东西,请使用向量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 2012-05-10
  • 2021-11-30
  • 2013-05-08
  • 2015-11-30
相关资源
最近更新 更多