c++中怎么将一个二维的字符数组放入栈中
c++中如何将一个二维的字符数组放入栈中?
问题如题,栈是STL的栈,是
------解决方案--------------------
------解决方案--------------------
你的二维数组是固定行列数的吗?如果行列数不一致,不能直接放到一个stack中,因为它们不是同一种类型。
如果行数不一样而列数一样,只能存放char(*)[列数]。
如果列数不一样,只能存放char**,并且数组用循环为每一行分配内存。
如果行列数确定,可以定义一个结构体来代替数组:
之所以这样做是因为C数组是不允许赋值的,但结构可以赋值。
------解决方案--------------------
二维数组和指针的指针是有区别的
------解决方案--------------------
C++11的标准库中有array类模板来代替定长数组。不用C++11的话,boost库也提供了这一模板。
一点题外话:boost库以及新标准都把array中长度参数定义为第二个参数,虽然在定义一维数组时更符合我们通常的习惯,但定义多维数组时每维的长度却是倒过来的,很别扭。其实我在自己写这个模板时都是把长度定义为第一个参数:
虽然类型在后面有些奇怪,但每维长度的定义是正序,不容易看错。类型在后的问题,可以用pascal语法去理解(只是示意,没有完全用Pascal的“下界..上界”的语法):
my::array<10, int> ==> array[10] of integer;
my::array<10, my::array<20, int> > ==> array[10][20] of integer;
------解决方案--------------------
------解决方案--------------------
先把指针和数组这一块基础再深入理解一下:
问题如题,栈是STL的栈,是
stack<char**> q;吗?我并不想往stack中放数组的指针,而是一个真实的二维数组,求例子。
C++
栈
二维数组
------解决方案--------------------
char *a="123456";
stack<char **>sTemp;
sTemp.push(&a);
char **b=sTemp.top();
------解决方案--------------------
你的二维数组是固定行列数的吗?如果行列数不一致,不能直接放到一个stack中,因为它们不是同一种类型。
如果行数不一样而列数一样,只能存放char(*)[列数]。
如果列数不一样,只能存放char**,并且数组用循环为每一行分配内存。
如果行列数确定,可以定义一个结构体来代替数组:
struct charary_10_20
{
char data[10][20];
};
stack<charary_10_20> q;
之所以这样做是因为C数组是不允许赋值的,但结构可以赋值。
------解决方案--------------------
二维数组和指针的指针是有区别的
------解决方案--------------------
C++11的标准库中有array类模板来代替定长数组。不用C++11的话,boost库也提供了这一模板。
typedef array<array<char, 20>, 10> charary_10_20;//注意声明时列数在前行数在后,但访问时还是先行后列:ary[行号][列号]
stack<charary_10_20> q;
一点题外话:boost库以及新标准都把array中长度参数定义为第二个参数,虽然在定义一维数组时更符合我们通常的习惯,但定义多维数组时每维的长度却是倒过来的,很别扭。其实我在自己写这个模板时都是把长度定义为第一个参数:
my::array<10, int> my_int_10;//相当于int[10]
std::array<int, 10> std_int_10;//相当于int[10]
my::array<10, my::array<20, int> > my_int_10_20;//相当于int[10][20];
std::array<std::array<int, 20>, 10> my_int_10_20;//相当于int[10][20];
虽然类型在后面有些奇怪,但每维长度的定义是正序,不容易看错。类型在后的问题,可以用pascal语法去理解(只是示意,没有完全用Pascal的“下界..上界”的语法):
my::array<10, int> ==> array[10] of integer;
my::array<10, my::array<20, int> > ==> array[10][20] of integer;
------解决方案--------------------
stack<vector<vector<char>>> q;
------解决方案--------------------
先把指针和数组这一块基础再深入理解一下: