基本STL:向量列表或列表向量,在这种特殊情况下会更好吗?

时间:2013-11-09 09:35:19

标签: c++ list text vector stl

好的,我设置了一个非常基本的示例议程,它具有以下特征并且行为如下:

这将是一群宇航员(班级宇航员),可以从地球到月球和火星等旅行。然后我想写下每个宇航员在每个星期的不同时期(班级)星体。所以议程将有一个单独的文本文件来存储数据。以下是时期和宇航员课程以及可能成为使用议程的人的一个例子:

class astronaut
{
    int id;
    date bday;
    vector<period> V; or list<period> L;
    bool he_dead;
}

class period
{
    int CelestialBody; //0 for earth, 1 for moon, 2 for mars, etc.
    int Establishment;
    int Duty;
    date EndDate;
}

使用它的人的例子:

open program
add_astronaut(01/01/2013)
close program

open program
select astronaut from list
end_period(Earth, 01/07/2013)
close program

open program
select astronaut from list
end_period(Mars, 01/01/2014)
close program

open program
select astronaut from list
end_period(Earth, 01/07/2014)
he_dead()
close program

好的,结束,我的想法是你永远不会删除任何宇航员或文本文件中的任何数据,它是一个寄存器,所有发生的删除都是程序在关闭之前清除其内存,并在保存到.txt之后。此外,有时候其他一些字段将留空,以便将来完成。

那么问题是,最好的是宇航员列表,每个宇航员都有一个周期矢量,或宇航员的矢量,每个宇航员都有一个周期列表?

我是STL的新手,在内存管理方面需要考虑一些背景理由。

2 个答案:

答案 0 :(得分:3)

鉴于我(尽管有限)了解你要做什么,应该使用宇航员和时期的矢量。它们是“默认”STL容器。如果要在数据中间进行大量插入和删除,列表非常有用。

以下是关于SO的两者的良好比较:vector vs. list in STL

答案 1 :(得分:1)

我会为两者使用矢量。

默认情况下使用向量:只要您在容器的末尾插入/删除它们就会更快,并且它们被分配给连续的内存块,因此它们在较小时会占用较少的内存。

如果你的某个容器将 large ,你也可以考虑使用deque,这将允许程序将内存分成几个较小的块。