不使用新的动态2D阵列

Dynamic 2D array without using new

本文关键字:动态 2D 阵列      更新时间:2023-10-16

我一直在C++中创建一个动态2D数组,而不使用C++中的new。我已经尝试了一段时间,但我不知道我应该做什么。

编辑:对不起,应该更具体一些。只是为了透明,是的,这是家庭作业,不,我不想解决它,我只想(不是双关语(指向正确的方向,自己编写代码。

作为参考,顺序如下:开发一个控制台应用程序,使用指针创建一个大小mxn的类型int矩阵。用户必须从键盘输入矩阵大小的值,并且其内容必须是随机生成的(1-100(。然后,必须计算并显示矩阵的转置(创建类是必要的(。

我们不能使用new,也不能使用vector,因为我们只能通过带有一维数组的指针来实现。到目前为止,我创建了一个表示"行"的类,以及另一个代表"列"的类。列进入行,行进入另一个称为矩阵的类。这是一个想法,但在实施过程中遇到了困难

new是在标准C++中创建动态对象或数组的唯一方法。因此,根据你对任务的理解,它可能被认为是不可能的。

如果我们假设您可以调用一个内部调用new的标准函数,那么问题是可以解决的。在C++中创建动态数组的常用方法是使用std::vector。然而,std::vector的元素可能不是数组,因此在技术上不可能使用它来创建2D动态数组。一种解决方法是将数组封装在类中,并将该类用作向量的元素。对于这样的数组包装器,有一个标准模板:std::array。数组包装器的矢量示例:

std::vector<std::array<type_of_element, 10>> name_of_vector(number_of_arrays);

由矢量管理的动态阵列内的阵列的元素将有效地具有与2D阵列相同的布局。

malloc做到了。这是我用来测试它的代码。弄清楚如何编写矩阵循环有点复杂,但当我把它记下来后,我意识到它是多么明显。

Matriz::Matriz(int numFil, int numCol)
:numFil(numFil), numCol(numCol)
{
mat = (int *)malloc(numFil * numCol * sizeof (int));
int c = 0;
for(int i = 0; i < numFil; i++)
{
for(int j = 0; j < numCol; j++)
{
*(mat + i * numCol + j) = ++c;
}
}
}
void Matriz::printMat()
{
for(int i = 0; i < numFil; i++)
{
for(int j = 0; j < numCol; j++)
{
std::cout << *(mat + i*numCol + j);
}
std::cout << std::endl;
}
}