gpt4 book ai didi

c++ - 如何在运行时才知道大小的函数内创建指针数组

转载 作者:行者123 更新时间:2023-11-28 06:36:06 26 4
gpt4 key购买 nike

主要我可以:

Node* myNodeArray2[myHeight][myWidth];//Does not call constructor

for(int i=0; i<myHeight; i++){
for(int j=0; j<myWidth; j++){
theNodeArray[i][j] = new Node("ThisIsTest", 5, 5);
}
}

所以对于上面的代码,myHeight 和 myWidth 可以是用户在运行时输入的。它不调用默认构造函数,我可以使用 new 运算符并遍历创建对象的数组。

我希望能够将 Node* myNodeArray2 传递给一个函数,让它创建数组大小并填充它。创建时,我希望元素是指针。我不想调用默认构造函数。我希望能够根据我的选择使用非默认构造函数调用 new 运算符。

当我尝试时:

void Test(Node*& theNodeArray, int myHeight, int myWidth){
theNodeArray = new Node*[myHeight][myWidth];

}

int main(){
Node* myNodeArray;
Test(myNodeArray, myHeight, myWidth);

}

我明白了

"myWidth is not a constant expression."

我尝试了几种不同的方法,但无法得到我想要的。我需要在一个单独的函数中进行创建。我需要能够在运行时定义大小。有帮助吗?

编辑:

我不想使用 std::vector。

编辑 2:

我不想这样

int** ary = new int*[sizeX];
for(int i = 0; i < sizeX; ++i)
ary[i] = new int[sizeY];

因为这会强制行成为连续内存空间的对象。我想分配一个二维指针数组。我不想一定要创建将指向的对象。

最佳答案

您可以使用以下内容:

Node*** MakeArrayNodePtr(int myHeight, int myWidth){
Node*** res = new Node**[myHeight];
for (int i = 0; i != myHeight; ++i) {
res[i] = new Node*[myWidth]();
}
return res;
}

别忘了

void DeleteArrayNodePtr(Node*** nodes, int myHeight, int myWidth)
{
for (int i = 0; i != myHeight; ++i) {
// And probably:
/*
for (int j = 0; j != myWidth; ++j) {
delete nodes[i][j];
}
*/
delete [] nodes[i];
}
delete [] nodes;
}

关于c++ - 如何在运行时才知道大小的函数内创建指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26743705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com