【问题标题】:Can you call an array by its name in C++?你能在 C++ 中通过数组的名称来调用数组吗?
【发布时间】:2018-07-07 19:39:36
【问题描述】:

如果我有一些数组numbers[] = [1, 2, 3, 4]array[] = ["numbers", "letters", "characters"],是否可以在C++ 中使用名称"numbers" 调用数组numbers?我不想调用单个元素,而是使用一个数组中的名称来调用一个单独的数组。

【问题讨论】:

  • 使用某种地图
  • @gj13 在我看来这需要更多解释。考虑做一个答案,以便有更多的格式和空间功能供您使用。
  • 数字、字母和字符是int类型的数组还是不同类型的数组?您可以拥有指向相同类型数组的指针或指向派生类型的指针数组,但不能拥有不同类型的数组。
  • @cup 在我使用它的上下文中,调用的数组总是ints,我只是选择随机名称作为示例

标签: c++ arrays call


【解决方案1】:

当人们有这样的问题时,意味着人们开始尝试创建脚本语言...继续关注这个问题会让您创建一个脚本语言,其名称可能是 PHP、bash...

您正在触及编程哲学:一种语言如何看待世界。如果你能说除了你的母语之外的另一种语言,你就会得到这样一个真理:如果你说一种不同的语言,你的世界就会不同。对于编程语言,也是如此。 C++ 看世界的方式不支持动态变量名,这实际上是你要问的。

阅读这些:
https://coderwall.com/p/al0aqq/dynamic-variable-name-in-bash https://unix.stackexchange.com/questions/60584/how-to-use-a-variable-as-part-of-an-array-name http://php.net/manual/en/language.variables.variable.php

根据您的需要,我建议使用std::map<std::string, std::vector<int>。或者如果需要,使用模板:std::map<std::string, T>

正如@Nybbit 所说,您也可以使用std::unordered_map。这取决于您的需要。谷歌std::mapstd::unordered_map的区别。

【讨论】:

  • 如果您不需要订购这些元素,我建议您查看unordered_map
【解决方案2】:

您可以按名称引用数组。

int numbers[] = {48, 49, 50, 51};
int letters[] = {65, 66, 67, 68};
int characters[] = { 31, 32, 33, 34};
int* array[] = {numbers, letters, characters};

请注意,这需要数组的地址:而不是字符串名称。为了让生活更轻松,您可能需要使用枚举

enum {ix_number, ix_letter, ix_char};
...
std::cout << array[ix_letter][0] << std::endl;
...
// alternatively
int* group = array[ix_char];
std::cout << group[2] << std::endl;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多