我有2個二維數組表示迷宮C++:功能來處理不同大小的數組
const char maze1[10][11]
和 const char maze2[20][21]
我試圖創建1個函數來處理兩個迷宮像這樣:
void solveMaze(maze[][])
{
}
和只傳遞等solveMaze(maze1);
迷宮然而,我必須爲陣列,這是differen提供一個大小t取決於傳入哪個迷宮。如果不重載函數或使用函數模板,我怎樣纔能有1個函數來處理這兩個數組?
我有2個二維數組表示迷宮C++:功能來處理不同大小的數組
const char maze1[10][11]
和 const char maze2[20][21]
我試圖創建1個函數來處理兩個迷宮像這樣:
void solveMaze(maze[][])
{
}
和只傳遞等solveMaze(maze1);
迷宮然而,我必須爲陣列,這是differen提供一個大小t取決於傳入哪個迷宮。如果不重載函數或使用函數模板,我怎樣纔能有1個函數來處理這兩個數組?
使用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)]
}
標準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];
}
gnu編譯器的答案看起來非常好。如果只有我有gnu :( – dukevin
其實可以不向量解決:
template<size_t N, size_t M>
void foo(char (&maze)[N][M])
{
// do your stuff here
}
在另一方面,我也更喜歡使用矢量:它只是感覺更安全。
如果你正在編寫C++,有什麼特別的原因你不使用STL容器? – Cascabel
不熟悉STL,我仍然是初學者 – dukevin
另外,這些** 2D **數組不是? – Zeenobit