在 C 或 C++ 中,您可以声明:
const char *foo[] = {
"hello",
NULL,
"cruel",
NULL,
NULL,
"world",
};
有什么方法可以使这种简单干净的初始化语法适用于(const)整数数组而不是字符数组(又名字符串常量),同时仍然允许 NULL?
因此,您是否可以使用某种初始化列表语法,例如
"hello"
或 "world"
等字符串,而不是像 &{ 1, 4, 12}
和 &({ 0, 4, 9 })
这样的字符串?或者字符串只是语法中的特殊情况?
我查看了初始化“指向整数数组的指针”,但没有帮助。另外,这是 11 年前提出的问题,也许更新的 C 或 C++ 标准可能会提供一种方法?
如果相关:
foo
的特定索引位置。这不是任意的。0
,那么他们需要在 foo[0]
中查找以找到指向相应数组的指针(例如)1, 4, 12
。NULL
的索引位置在数学上是不可能的,并且永远不会被访问。NULL
,因此 2D 数组将是浪费的。NULL
)。声明 foo
的包含文件将自动生成。因此,如果他们从数学中得出(例如)0,那么他们需要在 foo[0] 中查找指向相应数组的指针(例如)1、4、12。
我认为您希望
std::unordered_map
在计算出的索引值和相应的数组之间进行映射。
示例:
std::unordered_map<size_t, std::vector<int>> foo;
foo[0] = { 1, 4, 12 };
foo[1] = { 0, 4, 9 };
foo[99] = {11,22,33};
或者在较新版本的 C++ 上:
std::unordered_map<size_t, std::vector<int>> foo = {
{0, { 1, 4, 12 }},
{1, {0, 4, 9 }},
{99, {11, 22, 33}}
};
然后引用特定元素:
auto& lookup = foo[99]; // reference assignment
std::cout << lookup[0] << " " << lookup[1] << " " << lookup[2] << std::endl;
上面将打印:
11 22 33