对存储在向量中的对象进行某种引用
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 内部暴露得太多了?
简单快速的解决方案:
- 将
std::vector<X>
更改为 std::map<int, X>
或 std::unordered_map<int, X>
- 添加元素时,会为用户生成唯一的
id
和 return。使用 id
作为 map 中的键添加元素
- 当用户想要 access/delete 元素时,他应该提供
id
我在 class 的私有部分中有一个 std::vector<std::unique_ptr<SomeClass>>
变量。程序的其他部分使用 class 的方法向向量添加元素。它有效,但现在我有一个新要求,允许 class 的用户也从向量中删除一些元素。
我的问题是:我仍然想对外界隐藏矢量以保持对 class 的封装。我认为我的方法可以只是 return 向量中元素的迭代器,但我已经阅读了关于它的 C++ 参考,他们说,如果向量改变它的大小,all 之前制作的迭代器无效。所以,我的第二个想法是 return 新添加元素的索引,但由于显而易见的原因,它也不好。
所以,我的问题是:如何对向量中的对象进行持久引用,用于删除对象,没有 把我的 class 内部暴露得太多了?
简单快速的解决方案:
- 将
std::vector<X>
更改为std::map<int, X>
或std::unordered_map<int, X>
- 添加元素时,会为用户生成唯一的
id
和 return。使用id
作为 map 中的键添加元素
- 当用户想要 access/delete 元素时,他应该提供
id