对存储在向量中的对象进行某种引用

Making some kind of reference to objects stored in a vector

我在 class 的私有部分中有一个 std::vector<std::unique_ptr<SomeClass>> 变量。程序的其他部分使用 class 的方法向向量添加元素。它有效,但现在我有一个新要求,允许 class 的用户也从向量中删除一些元素。

我的问题是:我仍然想对外界隐藏矢量以保持对 class 的封装。我认为我的方法可以只是 return 向量中元素的迭代器,但我已经阅读了关于它的 C++ 参考,他们说,如果向量改变它的大小,all 之前制作的迭代器无效。所以,我的第二个想法是 return 新添加元素的索引,但由于显而易见的原因,它也不好。

所以,我的问题是:如何对向量中的对象进行持久引用,用于删除对象,没有 把我的 class 内部暴露得太多了?

简单快速的解决方案:

  1. std::vector<X> 更改为 std::map<int, X>std::unordered_map<int, X>
  2. 添加元素时,会为用户生成唯一的 id 和 return。使用 id 作为 map
  3. 中的键添加元素
  4. 当用户想要 access/delete 元素时,他应该提供 id