c ++ light appendable数组容器

时间:2013-05-16 17:48:00

标签: c++ arrays stl containers

这与我在Size of Qt containers: is QMap much larger than Qlist?回答的另一个问题有关
基本上我真的想重新实现一个非常轻便的容器,允许添加物品(无论​​是在最后还是在开始时都没关系 - 不,它们不必在记忆中连续......非常像列表)。不需要其他功能,只需追加,并且" count()"或" size()"函数返回容器中的元素数,所以我可以遍历每个元素。

这是因为我创造了大量的这些容器,它们占用了大量的记忆空间(见我的另一个问题)。

有没有人想出这样的容器挑战?我环顾网络,破坏了大部分重新实施的STL容器,这对我来说仍然太大了。我现在遵循的想法是以某种方式重写最简单的(forward_list)STL容器,但我不是功夫,但我会尝试。

谢谢你的时间。
弗朗西斯

3 个答案:

答案 0 :(得分:3)

我认为std::vector和容器一样轻量级。它只有不断的开销,不会为每个元素添加任何数据。您可以see here gcc的std::vector实现占用12个字节(在32位系统上)。你不会比这更少。

答案 1 :(得分:0)

感谢所有人,良好的投入。我终于把它修剪成以下内容:

1 - 以下是持有我信息的班级:这里有填充的任何建议吗?看起来没错,因为float = 32bits,+ 16 + 16 + 8 + 8 + 8. 我是否正确假设我可以在这里添加另一个8位元素而不会导致使用额外的内存,因为它无论如何都会填充32位块? / b>

class WFM {
  public:
    float h;
    quint16 fwhm2;
    quint16 sens2;
    quint8 fwhm;
    quint8 sens;
    quint8 nAmplitude;
    WFM(){ h=0; fwhm2=0; sens2=0; fwhm=0; sens=0; nAmplitude=0; }
};

2 - 一个QList,每个单元格都有一个指向我的metrics class(1)的指针,因此大小为[rows * cols]:@MattPhillips我将研究使用STD容器和@Angew可能是forward_lists而不是QList < / p>

typedef  QList< WFM >* metricsP;
metricsP *mappedMetrics;
mappedMetrics = new metricsP[rows*cols]; 

这应该减少它。我稍后会添加一些基准测试。
感谢大家的时间,感谢您!
欢迎任何其他意见。
Francesco

答案 2 :(得分:0)

从基准测试中我发现了QList&lt; WFM *&gt;优于QList&lt; WFM&gt;。

为什么

QList< WFM > *qlist = new QList< WFM >();
WFM wfmobj;
wfmobj.fwhm2=5;
wfmobj.sens2=6;
wfmobj.fwhm=7;
wfmobj.sens=5;
wfmobj.nAmplitude=3;
qlist->append(wfmobj);

比吃

更多的记忆
QList< WFM* > *qlist = new QList< WFM* >();
WFM *wfmobj = new WFM();
wfmobj->fwhm2=5;
wfmobj->sens2=6;
wfmobj->fwhm=7;
wfmobj->sens=5;
wfmobj->nAmplitude=3;
qlist->append(wfmobj);

???? 也许我错过了什么。