基本 STL:向量列表或列表向量,在这种特殊情况下哪个更好?
Posted
技术标签:
【中文标题】基本 STL:向量列表或列表向量,在这种特殊情况下哪个更好?【英文标题】:Basic STL: list of vectors or vector of lists, what would be better in this particular case? 【发布时间】: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 的新手,希望能提供一些关于内存管理问题的背景说明。
【问题讨论】:
【参考方案1】:鉴于我(尽管有限)对您正在尝试做的事情的理解,应该使用宇航员和时期的矢量。它们是“默认”的 STL 容器。如果您要在数据中间进行大量插入和删除,列表主要是有用的。
这是两者在 SO 上的一个很好的比较:vector vs. list in STL
【讨论】:
【参考方案2】:我会为两者使用向量。
默认使用向量:只要您在容器末尾插入/删除它们就会更快,并且它们被分配给连续的内存块,因此它们在较小时使用更少的内存。
如果您的容器之一将是巨大,您还可以考虑使用deque
,这将允许程序将内存分成几个较小的块。
【讨论】:
这就是我担心的问题,我加载了 3 名宇航员的列表,我选择第二个并添加一个句点,这会将向量分成两半,重新分配等。但我想这不是问题除非你超过一千万名宇航员…… @1.auxl2.1laux.2,我认为你错过了一个重要的概念。当你创建一个宇航员时,你只有一个指向周期向量的指针,指向包含周期的其他内存块,它不是一个连续的内存块。 等等,“vector以上是关于基本 STL:向量列表或列表向量,在这种特殊情况下哪个更好?的主要内容,如果未能解决你的问题,请参考以下文章