2

我有一个系统,我需要获取特定职位的“代码”。位置的数量是固定的,从 1 到 40,但是,每个位置可以有不同数量的代码(从 2 到 20)。容器是常量,需要定义,然后仅用于查找程序其余部分的位置。

例如,我需要能够做一些事情,比如myCodes.at(position3)得到{1, 3, 9, 23, 52}myCodes.at(position7)得到{23, 52}

因此,外部容器的大小是恒定的,但内部容器的大小可以从 2 到 20 不等。我知道如何做到这一点的方法是使用数组,并将第二维设为最大可能大小 (20): const int myCodes[40][20],然后只需用额外的 0“填充”内部数组。

然而,这感觉真的很浪费,特别是因为许多内部数组只能保存 2 个元素。我也在努力学习 C++11,所以如果有的话,我更喜欢“现代”解决方案。

4

3 回答 3

3

这可能是您想要的:

std::array<std::vector<code>, const_size>

外部是恒定的,内部是动态的。

保持不变并使用填充会更快,但更丑陋,所以不要一开始就尝试。18*20 未使用的整数对现代硬件来说并不算浪费。

于 2012-11-18T01:03:00.517 回答
2

对于一个疯狂的方法,一个不同大小的 std 数组的元组加上一组迭代器对数组的开始/结束。如果内存,第一个会导致非统一的连续块,第二个会为您提供基于统一范围的访问。理论上,第二个是可以即时计算的,但我只是缓存它。

将数组元组转换为对数组的代码编写起来会很有趣。

好吧,我真的会做向量数组甚至向量向量的先前答案。但这项技术展示了现代 C++11 的表现如何。

于 2012-11-18T01:14:06.873 回答
2

您应该使用数组vectorslists.

std::array<std::vector<MyType>, const_size>

std::array<std::list<MyType, const_size>

两者都是一维静态而另一维动态的结构。

于 2012-11-18T01:25:09.427 回答