在c++中处理多维数组长度
Handling multi-dimensional array lengths in C++
我想构建一个函数,它接受一个多维数组并像网格一样打印它。我遇到了麻烦,因为c++不允许一个函数有一个多维数组参数,除非你指定它的长度。这里有一个关于它的问题,可以用向量来回答。我还没有学会如何使用矢量,所以请不要在答案中使用它们,或者至少提供一个很好的教程,如果你这样做了。
无论如何,我想知道是否有可能在c++中返回一个数组…我开始用javascript编程,所以我想到的第一个解决方案是做一些像
这样的事情。int gen(int len){
return int arr(int a[][len]){
cout << a[0][0];
};
}
我知道这行不通,试过了,当它失败时并不感到惊讶。有办法做到这一点吗?
在c++中可以通过引用传递数组。通过将数组设置为template
,可以在函数中接收任何长度。例如,
template<size_t SIZE1>
void print (int (&arr)[SIZE1])
{ ... }
template<size_t SIZE1, size_t SIZE2>
void print (int (&arr)[SIZE1][SIZE2])
{ ... }
template<size_t SIZE1, size_t SIZE2, size_t SIZE3>
void print (int (&arr)[SIZE1][SIZE2][SIZE3])
{ ... }
该模式将在内部为每个不同大小的数组创建一个独特的函数。它提供了易用性,但可能会增加代码大小。
你必须知道数组的大小,这是没有办法的。std::vector
是解决这个问题的正确方法,你可以在这里找到一个很好的参考。这只允许传递向量,因为它知道自己的长度,函数可以问它,使它类似于你习惯从Javascript。
否则,必须以某种方式将数组的大小传递给函数。
一种方法是使用模板,但这对动态数组不起作用(并且有点浪费,因为它为使用的每个数组大小创建了函数的副本)。另一种方法是给函数添加一个额外的参数,大小为。相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '