我有2个二维数组表示迷宫C++:函数模板
const char maze1[10][11]
和 const char maze2[20][21]
我试图创建1个函数来处理两个迷宫像这样:
void solveMaze(maze[][])
{
}
,只是通过迷宫solveMaze(maze1);
如何使用函数模板来做到这一点?
我最近问过这个问题,但明确要求不要使用函数模板,因为我不确定如何使用它,但我想看看它是如何工作的。 (希望这不是“滥用”系统)
我有2个二维数组表示迷宫C++:函数模板
const char maze1[10][11]
和 const char maze2[20][21]
我试图创建1个函数来处理两个迷宫像这样:
void solveMaze(maze[][])
{
}
,只是通过迷宫solveMaze(maze1);
如何使用函数模板来做到这一点?
我最近问过这个问题,但明确要求不要使用函数模板,因为我不确定如何使用它,但我想看看它是如何工作的。 (希望这不是“滥用”系统)
有多维数组没有真正的支持。您应该考虑使用适当支持尺寸的课程。以下是卓有成效的
template<int N, int M>
void solveMaze(const char (&maze)[N][M]) {
size_t n = N;
size_t m = M;
int x = 0;
}
int main(int argc, char *argv[])
{
const char maze[3][2] = { { 0, 1} , {2, 3}, {4, 5} };
solveMaze(maze);
return 0;
}
非常有趣。出于好奇,为什么你将这些变量传递给main?他们需要这个吗? – dukevin
@dukevin哪个变量 - argc和argv?这些都没有必要 - 这是我的IDE认为主要应该是这样的:P –
你不需要也不应该使用模板来解决这个问题。你所做的只是解决不同大小的迷宫。
模板用于生成许多使用各种类型的类/函数。
而是构建一个类来存储迷宫。这门课应该存储迷宫的片段,并给出迷宫的组成部分。
首先,如果您使用的是更好的阵列,它会简单得多。 C阵列的问题在于它们容易衰减指针,一旦它们发生变形,尺寸就会丢失(而且,亲爱的,就我而言,它非常愚蠢......)
的选择则取决于你是否有固定大小的数组或要动态调整大小的数组:
std::array
(或者,如果不可用boost::array
)std::vector
由于模板将在std::array
的情况下更有意义,我会假设这是你选择的。
char const maze1[10][11]
相当于
std::array<std::array<char, 11>, 10> const maze1
这是稍微详细,但std::array
提出正式会员的方法,如.size()
,.begin()
,.end()
,等等...,它可以在功能很容易地通过。
现在,你的模板功能。该签名将仅仅是:
template <size_t M, size_t N>
void solveMaze(std::array<std::array<char, N>, M> const& maze);
然而,尽管你的问题,你更有可能想要在这里不使用模板(它们是小的好处)。所以,我会建议使用vector
和常规功能:
void solveMaze(std::vector< std::vector<char> > const& maze);
template<int w, int h>
void solveMaze(const char (&maze)[w][h])
{
//can use w,h now
}
我不认为这可以通过模板来完成。如果你想要一个char迷宫或者int迷宫或者一个浮动迷宫,你会使用模板,但是不仅仅是具有不同尺寸的char迷宫。 –
@ChadSchouggins:实际上,数组维度可以是模板参数。规范的例子是获得数组大小的模板函数:'template size_t size(T(&)[N]){return N; ''。语法虽然是神秘的。 –
@codeCube:它可能是有意义的,因为模板参数是常量,这可以允许编译器对某些大小进行特定的优化。这里值得怀疑,但有一天可能会有所帮助。 –