gpt4 book ai didi

c++ - 只为容器提供 const 迭代器有意义吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:06 27 4
gpt4 key购买 nike

我有一个类似于下一个的容器:

class MySpecialContainer
{
std::vector<std::tuple<InternalType, Type1, Type2>> _vec;
};

哪里Type1Type2可在容器外使用,InternalType仅在容器内使用。为了从外部迭代元素,我使用了一个类似于下一个的成员函数:

void MySpecialContainer::iterate(std::function<void(const Type1&, const Type2&)> fun)
{
for(auto& it : _vec)
{
fun(std::get<1>(it), std::get<2>(it));
}
}

如您所见,这种方法有几个局限性,比如不能迭代子范围或不能使用非变异 std::algorithms .

考虑MySpecialContainer出于逻辑考虑,元素从外部是不可改变的,仅提供 const_iterator 是否有意义?为了它?

如果第一个问题的答案是肯定的,那么...是不是更好?

  1. 分开_vec放入 2 个容器中,一个用于 InternalType和一个 std::pair<Type1, Type2> , 保持同步并返回 const_iterator对于第二个 vector

  2. 保持 vector 不变,并制作一个仅公开 const Type1 的自定义迭代器和 const Type2

最佳答案

只公开 const 迭代器就可以了。这在标准中甚至有优先权,因为 std::set 有效地做到了这一点。从技术上讲,iteratorconst_iterator 可以是不同的类型,但您不能通过任何一种迭代器修改元素,因为这可能会破坏 set 的不变量

关于c++ - 只为容器提供 const 迭代器有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25421859/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com