我有一组小物件。这些对象中的每一个都指向其他对象。这些指针可以实现为实际指针,也可以作为对象数组或其他内容的索引。它可能是一个这样的指针数组,其长度可能会改变。可能存在指向相同类型和其他类型的对象的指针,但这在编译时是已知的。
所以,例如:我有一个Person类。这个人有两个指向其父人的指针。还有另一个班级。每个人都有一个指向他/她访问过的所有地方的指针列表。
与实际的家谱相比,我可能希望通过删除/插入一些人来不时更改树。
为此目的,C ++标准库(C ++ 11)中是否有容器,还是应该更好地寻找专用的内存管理类?
我必须将数据传递给C接口,为什么我更喜欢基于可访问(只读)线性数组的存储方法。
答案 0 :(得分:5)
很高兴引用Stepanov:
尽可能使用向量。如果你不能使用矢量,重新设计你的解决方案,以便你可以使用矢量。
&#34;可访问的线性阵列&#34;部分指向vector<Person>
- 没有其他容器具有该功能 - 并且您的用例的其余部分不建议任何特定类型的存储或访问。如果你可以做vector<shared_ptr<Person>>
,那么听起来可能更干净,但这会破坏你的C接口要求。所以vector<Person>
可能是你的答案。
答案 1 :(得分:2)
std::vector
工作。std::vector
工作。std::vector
的一个点。std::vector
,直到他们撬开冷死的手指。std::vector::data
使用C ++ 11可以使std::vector
在这里与原始数组一样可用,如果不是这样可以更简单地实现为原始数组。 std::vector
对您有很多好处。其中最重要的是自动内存管理。因此,我倾向于std::vector
,这是一种选择。
答案 2 :(得分:1)
我更喜欢使用vector而不是其他(list等)。正如Bjarne所说&#34;如果你知道int和vector,那么你就知道C ++&#34;。 这是Youtube上的链接,正如Bjarne所说的关于矢量: Bjarne Stroustrup: Why you should avoid Linked Lists