不使用新的动态2D阵列
Dynamic 2D array without using new
我一直在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;
}
}
相关文章:
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 动态 2D 阵列.为什么分段错误?
- 不使用新的动态2D阵列
- 为什么我们在传递动态 2D 数组时不需要列数?
- 如何解决在使用动态 2D 数组进行矩阵乘法的 MPI 进行并行编程时的问题
- C++ 在类中删除动态 2D 数组时不断"Aborted (core dumped)"
- 如何在不使用指针的情况下将动态2D数组传递到函数
- 如何从文件中读取并将内容存储在动态 2D 数组中并以网格格式显示
- 如何在使用动态 2D 数组时修复此代码
- 创建一个动态2D数组来存储类对象
- 访问动态 2D 字符数组时引发访问冲突异常
- 在动态2D布尔数组中更改一个值似乎会更改不同数组中不同位置的值
- 动态2D阵列访问侵犯剩余
- C++动态 2D 阵列
- OpenGL 渲染大量动态 2D 圆
- 在 C++ 中销毁指向动态 2D 数组的指针
- 正在从CIN声明动态2D阵列
- c++中动态2d字符串数组的解除分配
- 无法在C++中声明动态 2D 数组