【发布时间】:2019-12-24 06:09:00
【问题描述】:
我在运行时需要一个数组来保存一些 x-y 坐标数据。它可能从几十个点到几千个点不等。因此,为了提高效率,我想在运行时分配数组。我找到了an example,但我无法扩展它。这是我现在拥有的:
double *A;
A = new double[NumSamp]; // NumSamp is an int set in earlier code at runtime
for (int y = 1; y < NumSamp ; y++) {
A[y] = y;
}
delete [] A;
A = NULL;
此代码工作正常,但当我尝试更改为二维时,我得到E2034 Cannot convert double( *)[2] to double*。这是我更改的导致错误的行:
A = new double[NumSamp][2];
我应该怎么做?我在 C++Builder (10.3.1) 中工作,目标是 Win32、iOS 和 Android。
【问题讨论】:
-
那是因为双 *A 不是正确的类型。
-
实际上可能与此重复:stackoverflow.com/questions/936687/… 很多人担心使用 [][] 时的性能和存储问题,他们建议创建一个包装一维数组的类可以像二维数组一样访问。
-
Tagger5926 我看到了那个帖子,但我不确定是否有更简单的方法(而且我是新手)。我会看看我能用它做什么
-
如果是这样,那么选择最易读和更容易使用的。一旦您开始工作并且遇到性能问题或严格的存储要求,您可以相应地更新您的问题。
-
@relayman357 你的
vector代码需要调用A.resize(NumSamp);而不是A.reserve(NumSamp);。您实际上并没有将任何元素推入向量中,因此您对operator[]的使用是未定义的行为。见std::vector::resize() vs. std::vector::reserve()。此外,您的最终解决方案应该作为单独的答案发布(如果有的话),而不是作为对您问题的编辑。
标签: firemonkey c++builder