哪个容器是管理映射到其他一些小对象的小对象的合适容器

Which is the right container to manage small objects which map to some other small objects?

本文关键字:对象 管理 映射 其他      更新时间:2023-10-16

我有一组小对象。这些对象中的每一个都指向其他对象。这些指针可以实现为实际指针,也可以实现为对象数组或其他内容的索引。它可能是此类指针的数组,其长度可能会更改。可能存在指向相同类型对象和其他类型的指针,但这在编译时是已知的。

所以,例如:我有一个班级人。此人有两个指向其父人员的指针。还有另一个班级的地方。每个人都有一个指向他/她访问过的所有地点的指针列表。

与实际的家谱相比,我可能想通过删除/插入一些人员来不时更改树。

C++标准库 (C++ 11) 中是否有用于此目的的容器,或者我应该最好寻找专用的内存管理类?

我将不得不将数据传递给 C 接口,为什么我更喜欢基于可访问(只读)线性数组的存储方法。

听起来是引用斯捷潘诺夫的好时机:

尽可能使用矢量。如果无法使用矢量,请重新设计解决方案,以便可以使用矢量。

"可访问的线性阵列"部分指向vector<Person> - 其他容器都没有该功能 - 并且用例的其余部分不建议任何特定类型的存储或访问。如果您可以执行vector<shared_ptr<Person>>,其中一部分听起来可能会更干净,但这会破坏您的 C 接口要求。 所以vector<Person>可能是你的答案。

问题:

  1. "可能有指向相同类型对象和其他类型的指针,但这在编译时是已知的。
  2. "这些指针可以作为实际指针实现,也可以作为对象数组或其他东西的索引来实现。
  3. 与实际的家谱相比,我可能想通过删除/插入一些人员来不时更改树。
  4. "C++标准库 (C++ 11) 中是否有用于此目的的容器,或者我应该最好寻找一个专用的内存管理类?"
  5. "我将不得不将数据传递给 C 接口,为什么我更喜欢基于可访问(只读)线性数组的存储方法。"

答案:

  1. 如果要在单个容器中使用指向多种类型对象的指针,这可能会变得困难。但是你可以使原始数组或std::vector工作。
  2. 如果您只是使用索引,这将大大简化您的"指向多种类型的指针"问题。同样,原始数组或std::vector工作。
  3. 动态更改原始数组大小很快就会变得粗略,我想说这是std::vector的一点。
  4. 根据你愿意投入的时间,管理你的记忆是一项巨大的努力,我会坚持使用原始数组或std::vector,直到他们撬开我冰冷的死手指。
  5. 如果你有 C++11 使用std::vector::data可以使std::vector与原始数组一样可用,否则,这将更容易实现为原始数组。

作为程序员,std::vector有很多好处。其中最重要的是自动内存管理。所以我倾向于std::vector选择。

我更喜欢使用向量而不是其他(列表等)。 正如 Bjarne 所说:"如果你知道 int 和 vector,那么你就知道C++"。这是Youtube的链接,正如Bjarne所说的矢量:Bjarne Stroustrup:为什么你应该避免链表