一个维度为常量,一个维度为变量的容器
Container where one dimension is constant and one is variable
我有一个系统,我需要获取特定位置的"代码"。位置数量恒定,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>
两者都是一个维度是静态的,另一个维度是动态的。
相关文章:
- 用C++中的一个变量定义一个常量
- 从另一个常量标准::映射初始化一个常量标准::映射的一部分
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- C++ 在 none 常量指针函数中返回一个常量指针
- 为什么重载"<<"需要一个常量参数?
- 为什么它是一个常量指针而不是指向常量指针
- 是一个常量句柄真的常量
- 将一个常量cstring附加到我自己的String类对象
- C++在类构造函数中定义了一个常量成员变量
- G++抱怨constexpr函数不是一个常量表达式
- 是一个常量字符串Still Preferrable
- 返回一个常量字符 *
- 将一个常量未签名的长流流式传输到流
- 从自定义 printf 函数返回一个常量字符*
- C++做虚函数总是必须是一个常量
- 我想将一个常量字符串写入包含另一个输入数据块的文件
- 如何计算初始化一个常量数组(制作常量查找表)
- C++:在初始化列表中传递一个常量 *p
- 我可以在 protobuf 中定义一个常量字符串吗?
- 初始化一个常量变量,如果失败则断言(c++)