我已经定义了一个向量数组,并希望将此数组传递给一个函数。
下面是我的代码:
void gridlist(std::vector<int> *grid, int rows, int cols){
..... }
int rows=4;
int cols=5;
std::vector<int> grid[rows][cols];
gridlist(grid,rows,cols);
唯一一个能让我把数组传递给函数的方法是通过指针(*)?。
根据以下描述,我尝试了不同的方法:Passing a 2D array to a C++ function,但我没能让它工作。
我总是得到以下错误:
could not convert '(std::vector<int> (*)[cols])(& grid)' from 'std::vector<int> (*)[cols]' to 'std::vector<int>'
gridlist(grid,rows, cols);
我不知道我做错了什么。一般来说,什么方法被认为是完成这项任务的最好/最安全的方法?
3条答案
按热度按时间u1ehiz5o1#
您可以使用模板:
在你的代码中有另外的变化,
int rows=4;
到const int rows=4;
,这是因为VLA(可变长度数组)在C++中是非标准的。如果你想要动态数组,那么考虑使用向量的向量(whhooh)代替:std::vector<std::vector<std::vector<int>>>
np8igboo2#
这里
grind
的类型为std::vector<int>[][]
,而grindlist()
的类型为std::vector<int> *
,您必须要么使grindlist()
的类型为std::vector<int>[] *
,要么确保grind
的类型为std::vector<int>[]
我建议使用
std::array<>
:ztmd8pv53#
如果您希望两个维度的大小都可变,则不能直接传递2D数组。
一种解决方案是固定
cols
的大小,并声明如下函数:如果固定一个维度的大小是不可接受的,则可以使用临时变量:
然后把它叫做:
但是,我将使用vector of vector of vector,而不是传统的c样式数组。