gpt4 book ai didi

c++ - 通过指针或值修改动态二维数组行

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

考虑以下代码:

#include <Windows.h>
#include <stdio.h>

void print2d(int** A,int Y,int X)
{
for(int i=0;i<Y;i++)
{
for(int j=0;j<X;j++)
printf("%d ", A[i][j]);
printf("\n");
}
}

int main()
{
int Y=2;
int X=4;
int** tab2d=new int*[Y];
for(int i=0;i<Y;i++)
{
tab2d[i]=new int[X];
for(int j=0;j<X;j++)
tab2d[i][j]=0;
}

int* row=new int[X];
for(int i=0;i<X;i++)
row[i]=i;

int option=0;
switch(option)
{
case 0:
tab2d[Y-1]=row;

case 1:
for(int i=0;i<X;i++)
tab2d[Y-1][i]=i;
}

print2d(tab2d,Y,X);
free(tab2d);
free(row);

system("pause");
}

鉴于在实际代码中,二维数组上会有很多迭代,情况 0 或情况 1 有什么优势吗?分配新的行指针似乎是一种更好的方法,但它不会在整个内存中分隔我的数组行吗?

最佳答案

一些事情:

1) 如果您的行都是相同数量的列,那么您创建和销毁二维数组的一般方法是次优的。在此处查看另一种方法的答案:

Delete 2D array C++

2) 至于创建一个新行只是为了替换值——为什么要创建一个全新的行?为什么不必要地调用分配器(和释放器来删除旧行)?为什么不只更改二维数组现有行中的值?

我可以看到您是否在运行时从二维数组中删除或添加行,然后您就可以合理地创建行和销毁单独的行。但是,如果您不更改二维数组的大小,而只是更改二维数组中的值,则不要创建新行。

关于c++ - 通过指针或值修改动态二维数组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24017601/

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