如何将向量数组传递到函数
How to pass an array of vectors to a function
我已经定义了一个向量数组,并希望将此数组传递到一个函数。
这是我的代码:
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);
唯一为我传递数组到函数的方法是通过指针(*)?
我根据以下描述尝试了不同的方法:将2D数组传递到C 函数,但我没有设法使其正常工作。
我总是会收到以下错误:
could not convert '(std::vector<int> (*)[cols])(& grid)' from 'std::vector<int> (*)[cols]' to 'std::vector<int>'
gridlist(grid,rows, cols);
我不知道我在做什么错。通常,什么是完成该任务的最佳/最安全方法?
您可以使用模板:
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>>>
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>[] *
,要么确保grind
是std::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);
如果您需要两个维度的变量大小,则不能直接传递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风格数组。
相关文章:
- 第 i 个元素返回 i 的函数数组
- 使用嵌套函数数组是个好主意吗?
- 正确实现类函数数组
- 试图引用已删除函数数组的相等运算符
- 如何在静态函数中使用成员函数数组
- 无法创建函数数组
- 构造函数数组
- 使用开关或定义函数数组 - 更快
- 编写一个函数,该函数将覆盖主函数数组中的值
- 可以像'funs[1]();'一样调用的函数数组
- std::AVX内部函数数组
- 如果数组大小未知,如何将函数数组作为参数传递
- 从函数数组中获取值
- 使用元编程在编译时初始化函数数组
- 将C函数数组转换为C++函数指针数组
- 复制构造函数 [数组] C++
- 添加函数数组并随机选择其中一个
- 指针到私有成员函数数组
- 可以单独声明函数数组的元素
- (c++)将main中的随机值保存到函数数组中