如何将向量数组传递给函数

时间:2016-06-16 15:44:14

标签: c++ arrays

我已定义了一个向量数组,并希望将此数组传递给函数。

这是我的代码:

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 个答案:

答案 0 :(得分:0)

您可以使用模板:

template<int rows, int cols>
void gridlist(std::vector<int> (&grid)[rows][cols]){

}

int main()
{
const int rows=4;
const int cols=5;
std::vector<int> grid[rows][cols];

gridlist(grid);
}

您的代码中存在其他更改,int rows=4;const int rows=4;这是因为VLA(可变长度数组)在C ++中是非标准的。如果你想要动态数组,那么考虑使用向量向量矢量(whhooh)代替:std::vector<std::vector<std::vector<int>>>

答案 1 :(得分:0)

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);

此处grind的类型为std::vector<int>[][],而grindlist()的格式为std::vector<int> *。您必须要grindlist()期待std::vector<int>[] *,或确保grindstd::vector<int>[]

我建议更喜欢std::array<>

template<int rows, int cols>
void gridlist(std::array<std::array<std::vector<int>, cols>, rows>& grid) {
    ..... }

constexpr int rows = 4;
constexpr int cols = 5;
std::array<std::array<std::vector<int>, cols>, rows> grid;

gridlist(grid);

答案 2 :(得分:0)

如果您想要两个尺寸的可变尺寸,则无法直接传递2D数组。

一种解决方案是修复cols的大小并声明您的函数:

void gridlist1(std::vector<int> grid[][5],int rows){...}

如果修复一个尺寸的大小是不可接受的,则可以使用临时变量:

void gridlist(std::vector<int> **grid,int rows, int cols){...}

并称之为:

const int rows=4;
const int cols=5;

std::vector<int> grid[rows][cols]; 

// Temp variable
std::vector<int>* temp[rows];
for (int i = 0; i < rows; ++i) temp[i] = grid[i];

gridlist(temp,rows,cols);
         ^^^^

但是,我会使用矢量矢量而不是传统的c风格数组。