一个维度为常量,一个维度为变量的容器

Container where one dimension is constant and one is variable

本文关键字:一个 常量 变量      更新时间:2023-10-16

我有一个系统,我需要获取特定位置的"代码"。位置数量恒定,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,所以如果有的话,我更喜欢"现代"解决方案。

这可能是您想要的:

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

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

同时保持恒定并使用填充会更快,但更丑陋,所以一开始不要尝试。 18*20 未使用的整数在现代硬件上并没有太大的浪费。

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

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

好吧,真的,我会做一个向量数组甚至向量向量的前面的答案。 但是这种技术展示了现代C++11可以得到的蝙蝠。

您应该使用vectors数组或lists数组。

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

两者都是一个维度是静态的,另一个维度是动态的。