【发布时间】:2018-02-18 09:52:48
【问题描述】:
我必须通过从磁盘读取数据来填充 1000 个对象的数组。但是,并非所有对象都存在。
一旦我声明了一个数组,就会为 1000 个对象保留内存。 当我一一阅读它们时,我将内存设置为相应的值。但是,成员 #276 可能没有对象,并且它的内存将保持设置为声明数组时存在的任何内容。
如何保留数组的某些成员无效/不存在的信息?
我可以以某种方式将成员的所有字节设置为零,但这可能是一个有效的对象。
显而易见的解决方案是添加另一个字节数组,根据该索引处的对象是否存在,将其设置为 1 或 0,但这似乎不是很优雅。
这可以用矢量来代替吗?它可以以某种方式存储一个空值吗?
【问题讨论】:
-
使用
std::pair<Object, bool>,其中bool部分将指示对象是否被读取? -
使用指针代替对象实例?
-
如果它是一个对象数组,如在结构或类中,那么让你的默认构造对象清楚地成为一个哨兵/空对象。如果空格的原因是保留索引值,请考虑将其作为对象的一部分或使用 map 或 unordered_map 等键/值容器,具体取决于您是否需要按顺序迭代它们。
-
谷歌“稀疏矩阵”
-
你不能只创建一个向量并只推回存在的元素吗?
标签: c++ arrays object vector sentinel