我使用名为 wxFreeChart 的开源库来绘制一些 XY 图表。在示例中,有使用静态数组作为系列的代码:
double data1[][2] = {
{ 10, 20, },
{ 13, 16, },
{ 7, 30, },
{ 15, 34, },
{ 25, 4, },
};
dataset->AddSerie((double *) data1, WXSIZEOF(dynamicArray));
WXSIZEOF ismacro defined like: sizeof(array)/sizeof(array[0])
在这种情况下一切正常,但在我的程序中我使用动态数组(根据用户输入)。
我做了一个测试并编写了如下代码:
double **dynamicArray = NULL;
dynamicArray = new double *[5] ;
for( int i = 0 ; i < 5 ; i++ )
dynamicArray[i] = new double[2];
dynamicArray [0][0] = 10;
dynamicArray [0][1] = 20;
dynamicArray [1][0] = 13;
dynamicArray [1][1] = 16;
dynamicArray [2][0] = 7;
dynamicArray [2][1] = 30;
dynamicArray [3][0] = 15;
dynamicArray [3][1] = 34;
dynamicArray [4][0] = 25;
dynamicArray [4][1] = 4;
dataset->AddSerie((double *) *dynamicArray, WXSIZEOF(dynamicArray));
但它不能正常工作。我的意思是没有画点。我想知道是否有可能我可以“欺骗”该方法并以它理解它的方式为其提供动态数组并从正确的位置读取数据
感谢帮助
最佳答案
您不能在动态分配的数组上使用 WXSIZEOF
宏。这是为了确定数组的大小,你有一个指向数组的指针 :) 你不能将这个技巧用于非编译时常量数组。
参数需要数组中的对数 - 并使用一个棘手的宏来计算它(使用宏有利于可维护性 - 只有一个地方使用大小常量)。
您可能只需将 5
传递给函数(或您用来确定数组大小的任何变量)。
(我应该补充一点,我对这个特定的 API 不熟悉......它可能会做一些时髦的事情使它不起作用......但我对此表示怀疑)
编辑。看起来(从一些评论来看)这个函数确实需要连续存储。
我认为您不需要编写自己的函数来将这些元素连续存放在内存中。那将是大量的重新分配和复制。更有可能的是,您应该使用不同的类。在浏览了他们的极简文档后,您似乎可以使用 XYDynamicSerie构建点的动态列表,然后将其添加到 XYDynamicDataset
或其他内容。
关于c++ - 差异动态静态二维数组c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2894083/