C++ c++;二维数组问题

C++ c++;二维数组问题,c++,pointers,multidimensional-array,C++,Pointers,Multidimensional Array,我想创建一个指向二维指针数组的指针(宽度和高度为x)。 这段代码会实现我的期望吗?(创建数组元素,写出关于它们的一些信息,然后释放所有分配的内存。) int main(int argc,char**argv){ int x=3; 节点***数组=新节点**[x]; 对于(int i=0;i

我想创建一个指向二维指针数组的指针(宽度和高度为
x
)。
这段代码会实现我的期望吗?(创建数组元素,写出关于它们的一些信息,然后释放所有分配的内存。)

int main(int argc,char**argv){
int x=3;
节点***数组=新节点**[x];
对于(int i=0;i<3;i++){
数组[i]=新节点*[x];
对于(int j=0;jcout row我建议您使用
vector
,或者您可以卷起自己的动态2D数组类(这并不难),它是平面1D
std::vector
的包装器

上述所有解决方案都将把节点对象存储在堆中,并负责清理内存

下面是一个简单矩阵类的示例,它是
std::vector
的包装器:

#包括
#包括
模板
类矩阵
{
公众:
矩阵():宽度(0),高度(0),向量(0){
矩阵(尺寸宽度、尺寸高度)
:width_(width)、height_(height)、vec_(width*height){
size_t size()常量{返回向量size();}
size_t width()常量{返回宽度}
size_t height()常量{返回高度}
//清除所有先前存在的数据
调整空洞大小(大小\u t宽度、大小\u t高度)
{宽度=0;高度=0;向量清除();向量调整大小(宽度*高度);}
void clear(){宽度=0;高度=0;向量=0.clear();}
运算符()(大小列,大小列){return vec.[row*width.+col];}
常量和运算符()(大小列、大小行)常量
{return vec_u3;[行*宽3;+列];}
私人:
尺寸和宽度;
尺寸与高度;
std::向量向量向量;
};
int main()
{
矩阵a(3,4);
a(1,2)=3.1415;

std::cout我建议您使用
vector
,或者您可以卷起自己的动态2D数组类(这并不难),它是一个平面1D
std::vector
的包装器

上述所有解决方案都将把节点对象存储在堆中,并负责清理内存

下面是一个简单矩阵类的示例,它是
std::vector
的包装器:

#包括
#包括
模板
类矩阵
{
公众:
矩阵():宽度(0),高度(0),向量(0){
矩阵(尺寸宽度、尺寸高度)
:width_(width)、height_(height)、vec_(width*height){
size_t size()常量{返回向量size();}
size_t width()常量{返回宽度}
size_t height()常量{返回高度}
//清除所有先前存在的数据
调整空洞大小(大小\u t宽度、大小\u t高度)
{宽度=0;高度=0;向量清除();向量调整大小(宽度*高度);}
void clear(){宽度=0;高度=0;向量=0.clear();}
运算符()(大小列,大小列){return vec.[row*width.+col];}
常量和运算符()(大小列、大小行)常量
{return vec_u3;[行*宽3;+列];}
私人:
尺寸和宽度;
尺寸与高度;
std::向量向量向量;
};
int main()
{
矩阵a(3,4);
a(1,2)=3.1415;
std::您考虑过使用吗

它看起来能够充分解决您试图解决的问题。如果您的问题可以接受,您可以将它与
节点*
或实际的
节点
类型一起使用。

您考虑过使用它吗


它看起来能够充分解决您试图解决的问题。如果您的问题可以接受,您可以将它与
节点*
或实际的
节点
类型一起使用。

您的代码看起来正确,但我建议创建
节点
对象的向量
vector
类管理自己的内存,因此您不必担心忘记删除任何内容

你甚至不必把它变成
节点
指针向量的向量。如果你说
我的向量。推回(我的节点)
,它会将
我的节点
复制到向量的堆分配内存中。如果你从函数返回向量,节点也会随之返回(它不会在函数末尾丢失,就像堆栈分配的对象一样)。例如:

// declare a vector of nodes on the stack
vector<node> nodes;

// declare a Node object on the stack
Node my_node(/*arguments*/);

// copy my_node (on the stack) into the vector's memory (on the heap)
nodes.push_back(my_node);

// (return 'nodes' from this function and store it somewhere)
//声明堆栈上的节点向量
向量节点;
//在堆栈上声明一个节点对象
节点my_节点(/*参数*/);
//将my_节点(堆栈上)复制到向量的内存(堆上)
节点。向后推_(我的_节点);
//(从此函数返回“节点”并将其存储在某个位置)

请注意,
节点
中的节点与
我的节点
是不同的对象。如果使用
新建
创建我的节点,则
push_back()
将复制指针(而不是对象本身),并且向量中的对象将与您使用
new
创建的对象相同。如果您这样做,您将拥有该对象,并且您必须记住在完成后将其删除。如果您让向量拥有该对象(如我的代码示例中所示),它将为您处理该问题。

您的代码看起来是正确的,但我建议您创建一个
节点
对象的向量向量
vector
类管理自己的内存,因此您不必担心忘记删除任何内容

你甚至不必把它变成
节点
指针向量的向量。如果你说
我的向量。推回(我的节点)
,它会将
我的节点
复制到向量的堆分配内存中。如果你从函数返回向量,节点也会随之返回(它不会在函数末尾丢失,就像堆栈分配的对象一样)。例如:

// declare a vector of nodes on the stack
vector<node> nodes;

// declare a Node object on the stack
Node my_node(/*arguments*/);

// copy my_node (on the stack) into the vector's memory (on the heap)
nodes.push_back(my_node);

// (return 'nodes' from this function and store it somewhere)
//声明堆栈上的节点向量
向量节点;
//在堆栈上声明一个节点对象
节点my_节点(/*参数*/);
//将my_节点(堆栈上)复制到向量的内存(堆上)
节点。推回(我的编号
// declare a vector of nodes on the stack
vector<node> nodes;

// declare a Node object on the stack
Node my_node(/*arguments*/);

// copy my_node (on the stack) into the vector's memory (on the heap)
nodes.push_back(my_node);

// (return 'nodes' from this function and store it somewhere)