C++函数基于参数创建数组
C++ function make array based on arguments
我正在尝试创建一个接受字符串和 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);
}
如果您想在某些key
和value
之间建立联系,您可能需要查看std::map
或std::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
如果这不是您要寻找的概念,那么您的问题超出了我的范围,直到您提供更多反馈。
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 如何使用可选的随机种子参数创建 roll_die() 函数
- 基于参数创建数组
- 从可变参数创建枚举?
- 如何从可变参数模板参数创建 std::tuple<>?
- 在 C++ 中按参数创建不同类型的对象?
- 根据参数创建派生类的新实例
- 基于模板参数创建多个类实现
- C++ 从模板参数创建元组向量
- 从从可调用参数创建的线程对象参数移动构造 C++11 线程
- 在构造函数中使用参数创建一个类数组
- 是否可以使用C 函数中的const int参数创建数组
- 如何使用不同对象的模板容器作为参数创建模板类
- C++:基于积分模板参数创建可变长度元组
- 使用按插入方式排序的参数创建哈希映射
- 避免为非默认参数创建临时变量?
- 是否可以根据参数创建返回对旧项目的引用的构造函数
- 使用整数模板参数创建编译时双精度
- C++ 使用数组作为参数创建泛型函数
- 基于参数创建基类中的派生类