最近的讨论让我想到了这个问题:
C++ 中是否存在不可变容器?或者,由于 C++ 更喜欢迭代器而不是通用容器,因此是否存在不可变迭代器?
我说的是类似于 Guava 的 ImmutableList
的东西或内置的 Collections.unmodifiable*
方法。需要明确的是,这两种类型的集合非常不同 - 前者本质上是不可变的,而后者仅对于获得不可修改引用的参与者不可变,但可以由有权访问未包装对象的参与者进行修改。
我很想知道是否有一个标准化的(实际的或事实上的,如在 Guava 中)等同于 ImmutableCollection
:
- 任何 Actor 都无法修改的集合。此外,采用这种类型的函数提供的文档表明它们不能也不会修改作为参数接收或作为返回值返回的此类集合。
或ret ro = Colletions.unmodifiableCollection(orginalCollection)
(及相关方法):
- 与上述略有不同,这是原始集合的 View ,任何拥有
originalCollection
的人都可以修改它,但不能由任何拥有返回值ro
。通常它是通过将原始集合包装在防止任何修改的代理中来实现的,但其他实现也是可能的。
我很了解 const std::iterator
和 friend ,但这非常不同 - 它确保调用者可以将对象传递给被调用者,而对象不会修改它,但它不向被调用者保证该对象不会被修改。
现在我是这里的 C++ 长期用户,虽然承认在过去 5 年里不是这样,但我想不出明显的等价物。
最佳答案
关于C++ 等价于不可变容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518879/