通过引用调用类对象的 2D 数组
2D array of a class object call by reference
我在stackoverflow和google上搜索了很多,但没有我的情况。我想声明我的类框的 2d 数组。它工作正常,那么我需要一个打印功能。如果我在 main() 中打印数组,那很好,但现在有了打印机功能,我似乎得到了很多错误。请帮助我解决我的错误。
#include <iostream>
class box
{
private:
char life;
public:
box();
void display();
void input_alive();
void input_dead();
};
box::box()
{
life = '0';
}
void box::display()
{
std::cout << " " <<life <<" ";
}
void box::input_alive()
{
life = '1';
}
void box::input_dead()
{
life = '0';
}
void printer(box *array, int yy, int xx)
{
int i, j;
for(i=0; i<yy; i++) //PRINTER
{
for(j=0; j<xx; j++)
{
array[i][j].display();
if (j+1 == xx) //just newline for separate rows
std::cout << std::endl;
}
}
}
int main()
{
int row=5, col=5;
box arr[row][col];
arr[3][4].input_alive();
arr[1][1].input_alive();
printer(arr, row, col);
return 0;
}
这种通过引用传递数组的语法在普通的 int/char 数组中工作正常,但为什么不在这里。如果我把打印机功能放在主上,它:(工作正常。我必须使用新的还是什么?或者如何将盒子数组传递到函数中?谢谢。
首先,C++不支持可变长度数组,因此您的代码不符合标准,因此不可移植。
其次,您可以使用std::array
避免所有痛苦:
#include <array>
template <size_t ROWS, size_t COLS>
void printer(std::array<box, ROWS>, COLS>& arr)
{
for(int i=0; i<ROW; ++i)
{
for(int j=0; j<COL; ++j)
{
// do something with arr[i][j]
}
}
int main()
{
const int row=5;
const int col=5;
std::array<std::array<box, row>, col> arr;
arr[3][4].input_alive();
arr[1][1].input_alive();
printer(arr);
return 0;
}
您的解决方案是忘记原始数组。相反,您可以使用std::vector
或std::array
并编写一个带有operator()
的矩阵类,如C++常见问题解答中所述。另请参阅FAQ中的下一项,了解您希望更喜欢(x, y)
形式而不是[x][y]
的原因,但考虑到有些优秀的程序员更喜欢后一种语法(使用代理类),因此情况可能并不像FAQ所说的那么清楚。
在任何情况下,您都需要一个具有std::vector
或std::array
实现的 Matrix 类。原始数组是执行此任务的错误工具。
相关文章:
- 2D数组来自文本输入,中间有空格
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 使用矢量将文本文件中的输入存储到 2D 数组中
- 获取 2D 数组 c++ 中的所有数字对
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 如何在构造函数中使用初始值设定项设置具有相同值的 2d 数组?
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 使用指针算法修改函数中的 2D 数组
- 在C++中初始化和打印 2D 数组
- 有没有办法使用输入的维度初始化 2d 数组中的所有项目而不循环C++?
- C++ 2D 数组写入多个位置
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 如何从initializer_list初始化 2D 数组
- 交换函数不是在 C++ 中交换 2D 数组的元素