C++函数基于参数创建数组

C++ function make array based on arguments

本文关键字:参数 创建 数组 函数 于参数 C++      更新时间:2023-10-16

我正在尝试创建一个接受字符串和 int 的函数,并创建一个给定字符串和给定 int 的数组。 例如,给定字符串"myarray"和 5 应该创建一个我使用的数组int myarray[5];

void function(string x, int y) {
    int x[y];
}

但这给了我declaration of 'int x[y]' shadows a parameter...有什么提示吗?

你只能用宏真正做这种事情,例如

#define FUNCTION(x, y) 
    int x[y]
// ...
FUNCTION(myarray, 5);

然后,这将扩展到:

int myarray[5];

根据需要。

但是我不推荐它 - 如果您解释这背后的真正问题,那么可能有一个更好的解决方案(不涉及宏)。

不能在运行时命名具有数组字符串名称的变量。

您只能使用变量的编译时名称,这意味着所有变量名称都必须在代码中定义。

如果你真的想要动态名称,那么你应该有某种映射,存储一个字符串,向量的名称,和一个向量。

declaration of int x[y] shadows a parameter实际上意味着您正在"隐藏"另一个变量。

编译器应该如何区分名为 x 的字符串参数和名为 x 的数组?没有!它们都有相同的名称,因此无法再访问该字符串。

也就是说,C++数组的大小必须在编译时知道,而代码中并非如此。一些编译器将其作为扩展提供,但如果您想保持标准兼容,则应使用向量。

void function(std::string x, int y) {
    std::vector<int> other_name(y);
}

如果您想在某些keyvalue之间建立联系,您可能需要查看std::mapstd::unordered_map

void function(string x, int y) {
    std::map<std::string, std::vector<int>> my_map;
    my_map[x] = std::vector<int>{1, 2, 3, 4, 5};
}

这将创建一个映射,该映射将字符串x与向量{1, 2, 3, 4, 5}

相关联
最好

使用 vector 而不是 C 样式数组。 最好使用 C++ Std Lib 函数,而不是自己动手。 鉴于这两件事,你试图做的事情在任何上下文之外都没有意义。

缺乏上下文,这是我要做的:

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
    const std::string val = "Foo";
    constexpr size_t numVals = 5;
    std::vector <std::string> myVals (numVals, val);
    std::copy (myVals.begin(), myVals.end(), std::ostream_iterator <std::string> (std::cout, "n"));
}

代码中的错误是变量隐藏。通过声明局部变量"x"来隐藏参数"x"。当使用变量x时,编译器只知道使用局部变量x,它是一个数组,而不是传递的字符串x。

如果您要传递的字符串的性质应该是变量名,则这不是您要查找的语法,实际上不存在。C 和 C++ 中的变量名是在编译时而不是运行时声明的。在运行时找出变量的名称可能很困难,如果不是不可能的话。

话虽如此,真的没有理由关心函数如何调用它的本地数组。它可以是你所关心的一切。您似乎更关心使用函数调用创建大小数组。类似于内置的新的东西。

int* x; // a pointer to an integer.
x = new int[10]; // x now points to an array of 10 ints and can be used as an array
// do stuff with x[] array here
delete[] x; // free up memory

如果这不是您要寻找的概念,那么您的问题超出了我的范围,直到您提供更多反馈。