c++轻可追加数组容器
c++ light appendable array container
这与我之前在Qt容器的大小上问的另一个问题有关:QMap比Qlist大得多吗?
基本上我真的想重新实现一个非常轻的容器,允许添加项目(不管是否在结束或开始-不,他们不必在内存中连续…非常像列表)。不需要其他函数,只需要追加一个"count()"或"size()"函数来返回容器中的元素数量,这样我就可以遍历每个元素。
这是因为我创建了大量这样的容器,它们占用了大量的内存空间(参见我的另一个问题)。
有人提出过这样的挑战吗?我环顾了一下网络,发现大多数重新实现了STL容器,这对我来说仍然太大了。我现在遵循的想法是重写最简单的(forward_list) STL容器,但我不是功夫,但我会尝试。
感谢您的宝贵时间。
Francesco
我认为std::vector
是轻量级的容器得到。它只有恒定的开销,不为每个元素添加任何数据。您可以在这里看到gcc的std::vector
实现占用了12个字节(在32位系统上)。你不会得到比这更少的了
感谢大家,这里有很好的输入。我最终将其精简为以下内容:
1 -下面是类持有我的信息:有什么建议填充这里?float=32位,+ 16 + 16 + 8 + 8 + 8。我是否可以假设我可以在这里添加另一个8位元素而不会导致使用额外的内存,因为它无论如何都会填充到32位块?
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持有指向我的指标类(1)的每个单元格的指针,因此大小为[rows*cols]: @MattPhillips我将考虑使用STD容器和@Angew可能是forward_lists而不是QList
typedef QList< WFM >* metricsP;
metricsP *mappedMetrics;
mappedMetrics = new metricsP[rows*cols];
这应该会减少它。稍后我将添加一些基准测试。
感谢大家的时间,谢谢!
Francesco
从基准测试中,我不知怎么发现QList<WFM*>优于QList
为什么
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);
? ?也许我遗漏了什么。
- 使用 swig 追加到字节数组
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 使用 sprintf 追加到字符数组
- 问:Apache Arrow 数组生成器不安全追加
- 将数据追加到C++中的数组
- 将数组追加到向量中
- 追加到 C++ 数组
- 如何将元素追加到数组 c++
- 追加到动态内存中的数组
- 通过重载运算符 [] 追加到数组
- 将字符数组追加到字符串 C++
- 如何在 C# 中将整个数组追加到字符串
- AVR的C/C++中的数组不断追加
- 追加在 C++ 中的数组链表中不起作用
- 追加到具有可用空间的字符数组
- C++字符串数组追加的目标C++崩溃
- C++ 追加到数组
- 追加/打印/插入数组c++函数问题
- c++轻可追加数组容器
- C++常量数组追加