哪个是管理映射到其他小对象的小对象的正确容器?

时间:2014-11-17 12:34:43

标签: c++ c++11 std

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

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

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

为此目的,C ++标准库(C ++ 11)中是否有容器,还是应该更好地寻找专用的内存管理类?

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

3 个答案:

答案 0 :(得分:5)

很高兴引用Stepanov

  

尽可能使用向量。如果你不能使用矢量,重新设计你的解决方案,以便你可以使用矢量。

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

答案 1 :(得分:2)

的问题:

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

    1. 如果要在单个容器中使用指向多种类型对象的指针,这可能会变得困难。但是你可以制作一个原始数组或std::vector工作。
    2. 如果您只是使用可以大大简化多种类型指针的指数,那么#li>问题。再次使用原始数组或std::vector工作。
    3. 动态更改原始数组大小变得粗略,我说这是std::vector的一个点。
    4. 根据您愿意投入的时间,管理您的记忆是一项巨大的努力,我会坚持使用原始阵列或std::vector,直到他们撬开冷死的手指。
    5. 如果您使用std::vector::data使用C ++ 11可以使std::vector在这里与原始数组一样可用,如果不是这样可以更简单地实现为原始数组。
    6. 作为程序员,

      std::vector对您有很多好处。其中最重要的是自动内存管理。因此,我倾向于std::vector,这是一种选择。

答案 2 :(得分:1)

我更喜欢使用vector而不是其他(list等)。正如Bjarne所说&#34;如果你知道int和vector,那么你就知道C ++&#34;。 这是Youtube上的链接,正如Bjarne所说的关于矢量: Bjarne Stroustrup: Why you should avoid Linked Lists