C++ 用C+函数实现动态矩阵+;
伙计们,我想通过使用函数实现动态二维数组(为了更容易创建数组,当我要解决不同的任务时)。 我使用下一种内存分配方式:C++ 用C+函数实现动态矩阵+;,c++,arrays,function,memory,C++,Arrays,Function,Memory,伙计们,我想通过使用函数实现动态二维数组(为了更容易创建数组,当我要解决不同的任务时)。 我使用下一种内存分配方式: 创建一个大型MxN阵列 创建一个包含M个指针元素的数组 代码: intmain() { int*A1; 国际**A; A1=新的T[M*N]; A=新的T*[M]; 对于(int i=0;i您缺少一个封装级别-创建一个矩阵类,无法同时管理内存和指针。作为一个积极的副作用,您将能够为新数据类型定义自定义运算符,并提高代码的可读性。我找到了另一种方法,因为[0]从理论上讲,当我
intmain()
{
int*A1;
国际**A;
A1=新的T[M*N];
A=新的T*[M];
对于(int i=0;i您缺少一个封装级别-创建一个矩阵类,无法同时管理内存和指针。作为一个积极的副作用,您将能够为新数据类型定义自定义运算符,并提高代码的可读性。我找到了另一种方法,因为[0]从理论上讲,当我们使用delete[]A[0]
时,收集与A1相同的内存地址,这与delete[]A1
相似,还是否
#ifndef MATRIX_H
#define MATRIX_H
namespace matrix
{
template <typename T> T** create_matrix(int N, int M)
{
int *A1;
int **A;
A1 = new T [M*N];
A = new T* [M];
for(int i=0;i<M;i++)
{
A[i]=(A1+(i*M));
}
return A;
}
template <typename T> void delete_matrix(T** A)
{
delete []A;
delete []A[0]; //this is must be equivalent to delete []A1
}
}
#endif
#ifndef矩阵
#定义矩阵
名称空间矩阵
{
模板T**创建矩阵(整数N,整数M)
{
int*A1;
国际**A;
A1=新的T[M*N];
A=新的T*[M];
对于(int i=0;i如何创建一个模板类来维护A1
和a
?函数只能返回一个值,这是正确的,但这也意味着它们基本上可以返回任何值,例如struct Foo{int*A1;int**a;}我在C++中没有学习OOP,如果我可以的话,我将在未来的学习主题中解释一下如何解决这个问题,不需要OOP。非常感谢。打开你的C++书中的章节,讨论<代码> STD::向量< /代码>,然后开始阅读。你会惊讶地发现C++库可以为你做所有这些分配,并自动完成。Y删除基本指针,不用担心一件事!感谢回答,但是STD::vector或OOP,或者结构只是解决这个问题的方法?所以只有OOP方式才是最好的?现在我不知道C++中的OOP。@ WhiteBear不是OOP。你可以在C++中定义自定义数据类型,就像C++中添加的那样。很好的OOP概念对你很有用,但是你不需要使用它们,只需要使用逻辑数据分组(最好使用RAII内存管理)和专用的类型签名,这样算法和操作符就可以识别它(或者专门为它编写)。不是OOP本身。如果可能的话,你能有一个链接来阅读这篇文章吗(对于初学者)@ WhiteBear + C++通过阅读书籍和使用同行评审的教程(不是你在网上找到的垃圾)更好地学习。如果你是初学者,没有人能给你一个链接,因为有很多东西可以作为前提学习。
#ifndef MATRIX_H
#define MATRIX_H
namespace matrix
{
template <typename T> T** create_matrix(int N, int M)
{
int *A1;
int **A;
A1 = new T [M*N];
A = new T* [M];
for(int i=0;i<M;i++)
{
A[i]=(A1+(i*M));
}
return A; //how to return also A1 for preventing memory leack
}
template <typename T> void delete_matrix(T* A1, T** A)
{
delete []A;
delete []A1;
}
}
#endif
#ifndef MATRIX_H
#define MATRIX_H
namespace matrix
{
template <typename T> T** create_matrix(int N, int M)
{
int *A1;
int **A;
A1 = new T [M*N];
A = new T* [M];
for(int i=0;i<M;i++)
{
A[i]=(A1+(i*M));
}
return A;
}
template <typename T> void delete_matrix(T** A)
{
delete []A;
delete []A[0]; //this is must be equivalent to delete []A1
}
}
#endif