【问题标题】:Basic STL: list of vectors or vector of lists, what would be better in this particular case?基本 STL:向量列表或列表向量,在这种特殊情况下哪个更好?
【发布时间】:2013-11-09 09:35:19
【问题描述】:

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

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

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 的新手,希望能提供一些关于内存管理问题的背景说明。

【问题讨论】:

    标签: c++ list text vector stl


    【解决方案1】:

    鉴于我(尽管有限)对您正在尝试做的事情的理解,应该使用宇航员和时期的矢量。它们是“默认”的 STL 容器。如果您要在数据中间进行大量插入和删除,列表主要是有用的。

    这是两者在 SO 上的一个很好的比较:vector vs. list in STL

    【讨论】:

      【解决方案2】:

      我会为两者使用向量。

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

      如果您的容器之一将是巨大,您还可以考虑使用deque,这将允许程序将内存分成几个较小的块。

      【讨论】:

      • 这就是我担心的问题,我加载了 3 名宇航员的列表,我选择第二个并添加一个句点,这会将向量分成两半,重新分配等。但我想这不是问题除非你超过一千万名宇航员……
      • @1.auxl2.1laux.2,我认为你错过了一个重要的概念。当你创建一个宇航员时,你只有一个指向周期向量的指针,指向包含周期的其他内存块,它不是一个连续的内存块。
      • 等等,“vector V;”怎么来的是指针?我认为当你在一个类中有一个向量时,它不仅在内部而且与该类的其他成员连续分配。那这样不对吗?
      • 是的,不正确。在内部,向量指向其他地方。必须这样做,否则该类将具有非常量的大小,这将使其无法放入向量中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 2016-12-24
      • 2012-06-29
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 2010-09-23
      相关资源
      最近更新 更多