gpt4 book ai didi

c++ - 在 C++ 中将一维数组作为二维数组访问

转载 作者:IT老高 更新时间:2023-10-28 22:14:56 24 4
gpt4 key购买 nike

这困扰了我一段时间。很多时候,我发现自己制作了一个大缓冲区来保存“最大”数量的数据。这有助于我避免每次下一个数据集的大小发生变化时动态分配和解除分配缓冲区。

例如,假设我有一个数组对于它的实际有用大小来说太大了,但我知道有用数据的长度。

int amountOfData = 9;
char data1D[100] = some data that is only 9 bytes long stored in a 100 byte array

假设我有一个算法,我想在这个使用二维数组索引的数据集上运行。所以我希望能够按如下方式访问数据:

cout << "I am accessing this data as a 2D array: " << data1D[0][1] << endl;

假设对于这个算法,我知道二维数组的 xlength 和 ylength 将是:

int xlength = 3;
int ylength = 3;

对于本次迭代,因为 amountOfData = 9。但是,下一次迭代的长度可能会有所不同。 IE。它们可以是 xlength = 4ylength = 4 给定 amountOfData = 16

我想做某种类型的转换,允许我使用 2D 数组索引转换 1D 数组。我知道我的初始 1D 长度有多长,它告诉我我的 2D xlengthylength 有多长,所以这应该很容易做到而不使用 newmalloc 只要最初的 100 个字节足够长,可以容纳任何对我有用的数据集。

我意识到:

char** data2d = (char**) data1D;

将不起作用,因为编译器不知道第二维的大小。但我会在运行时知道它是什么!

造成这种情况的根本原因是什么?有什么解决方法吗?我错过了什么吗?

最佳答案

一旦你在运行时只知道数组的长度,我想最好不要使用二维数组来解决这个问题,而是使用函数来模拟它。例如,在 C 中:

char data1D[1000] = {0};

unsigned int getElement(unsigned int x, unsigned int y,
unsigned int xMax, unsigned int yMax)
{
// Do some error tests
return ((unsigned int *) data1D)[x*xMax + y];
}

关于c++ - 在 C++ 中将一维数组作为二维数组访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17416543/

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