哪个容器是管理映射到其他一些小对象的小对象的合适容器
Which is the right container to manage small objects which map to some other small objects?
我有一组小对象。这些对象中的每一个都指向其他对象。这些指针可以实现为实际指针,也可以实现为对象数组或其他内容的索引。它可能是此类指针的数组,其长度可能会更改。可能存在指向相同类型对象和其他类型的指针,但这在编译时是已知的。
所以,例如:我有一个班级人。此人有两个指向其父人员的指针。还有另一个班级的地方。每个人都有一个指向他/她访问过的所有地点的指针列表。
与实际的家谱相比,我可能想通过删除/插入一些人员来不时更改树。
C++标准库 (C++ 11) 中是否有用于此目的的容器,或者我应该最好寻找专用的内存管理类?
我将不得不将数据传递给 C 接口,为什么我更喜欢基于可访问(只读)线性数组的存储方法。
听起来是引用斯捷潘诺夫的好时机:
尽可能使用矢量。如果无法使用矢量,请重新设计解决方案,以便可以使用矢量。
"可访问的线性阵列"部分指向vector<Person>
- 其他容器都没有该功能 - 并且用例的其余部分不建议任何特定类型的存储或访问。如果您可以执行vector<shared_ptr<Person>>
,其中一部分听起来可能会更干净,但这会破坏您的 C 接口要求。 所以vector<Person>
可能是你的答案。
问题:
- "可能有指向相同类型对象和其他类型的指针,但这在编译时是已知的。
- "这些指针可以作为实际指针实现,也可以作为对象数组或其他东西的索引来实现。
- 与实际的家谱相比,我可能想通过删除/插入一些人员来不时更改树。
- "C++标准库 (C++ 11) 中是否有用于此目的的容器,或者我应该最好寻找一个专用的内存管理类?"
- "我将不得不将数据传递给 C 接口,为什么我更喜欢基于可访问(只读)线性数组的存储方法。"
答案:
- 如果要在单个容器中使用指向多种类型对象的指针,这可能会变得困难。但是你可以使原始数组或
std::vector
工作。 - 如果您只是使用索引,这将大大简化您的"指向多种类型的指针"问题。同样,原始数组或
std::vector
工作。 - 动态更改原始数组大小很快就会变得粗略,我想说这是
std::vector
的一点。 - 根据你愿意投入的时间,管理你的记忆是一项巨大的努力,我会坚持使用原始数组或
std::vector
,直到他们撬开我冰冷的死手指。 - 如果你有 C++11 使用
std::vector::data
可以使std::vector
与原始数组一样可用,否则,这将更容易实现为原始数组。
作为程序员,std::vector
有很多好处。其中最重要的是自动内存管理。所以我倾向于std::vector
选择。
我更喜欢使用向量而不是其他(列表等)。 正如 Bjarne 所说:"如果你知道 int 和 vector,那么你就知道C++"。这是Youtube的链接,正如Bjarne所说的矢量:Bjarne Stroustrup:为什么你应该避免链表
相关文章:
- 我们可以通过 IPC 传递具有动态管理成员的类对象吗?
- 创建跨平台 C++ 触摸管理器.在 c++ 中传递 Objective-c 对象涉及代码
- 管理器类和对象类之间的通信
- 是否可以在专用内存空间中分配一个为提升管理共享内存而创建的对象
- 如何将指针从unique_ptr传递到另一个对象并管理寿命
- 模板对象管理器,参数不正确
- C++ 对象内存管理
- 编写安全包装类以管理用户定义对象的指针
- 如何管理和处理仅在堆上创建的类的对象
- 一类应管理其实例化对象
- 使用GDI+删除位图和CLSID对象时,C++内存管理失败
- 学生成绩管理系统 在C++中,表达式必须具有指向对象类型的指针
- 检查派生自enable_shared_from_this的对象是否由shared_ptr管理?
- C 在具有不同对象类型的容器中管理ifstream
- 类对象也管理树结构
- 使用 std::unique_ptr 管理 COM 对象
- 公开对象管理器对象的可接受方法?
- Cocos2d-x对象管理与多个场景和层
- c++中的COM对象管理
- 对象管理——容器或工厂