我有2个代表迷宫的2D阵列
const char maze1[10][11]
和
const char maze2[20][21]
我正在尝试创建一个函数来处理这两个迷宫:
void solveMaze(maze[][])
{
}
然后像solveMaze(maze1);
一样通过迷宫
但是,我必须为数组提供一个大小,这取决于传入的迷宫。不重载函数或使用函数模板,如何处理两个数组?
答案 0 :(得分:7)
使用std::vector
:
// Initialize the vector with 11 rows of 10 characters
std::vector<std::vector<char> > maze(11, std::vector<char>(10));
void solveMaze(const std::vector<std::vector<char> > &maze) {
// note that you can access an element as maze[x][y]
}
boost::multi_array
效率稍高(如果允许使用提升)。我认为它是这样的:
boost::multi_array<char, 2> maze(boost::extents[10][11]);
void solveMaze(const boost::multi_array<char, 2> &maze) {
// note that you can access an element as maze[x][y]
}
使用指针:
const char maze1[10][11];
void solveMaze(char *maze, size_t x_length, size_t y_length) {
// note that you can access an element as maze[x + (x_length * y)]
}
答案 1 :(得分:1)
Std c ++不允许变化大小的数组。 Gnu扩展允许这样做。
给定一个gnu编译器,你可以
void solvemaze(int w, int h, const char maze[h][w])
{ //solve it...
}
,否则
void solvemaze(int w, int h, const char *maze)
{ //solve it, bearing in mind:
//maze[y][x] = maze[(w*y)+x];
}
答案 2 :(得分:1)
实际上它可以在没有矢量的情况下解决:
template<size_t N, size_t M>
void foo(char (&maze)[N][M])
{
// do your stuff here
}
另一方面,我也更喜欢使用矢量:它只是感觉更安全。