我确实有种感觉,人们会试图敲打我的脑袋并说“你不应该那样做!” (我很清楚这个事实);尽管如此,这是我的问题:
假设您有以下 C++ 代码:
编辑:
我认为我没有充分展示我想做的事情,尽管大多数答案都很棒。所以这是我的代码的编辑版本。它的核心是每次迭代我仍然需要使用 array 值,它恰好是 x
的子数组,而不仅仅是一个值索引:
unsigned int n = 2000; // or any other number for that matter
double * x = new double[n];
double resultArray;
// fill array with meaningful data
// do all kinds of initializations
for( int i=0 ; i<someNumber ; ++i ){ //someNumber ~ 1900
// do some stuff
for (j=0 ; j<someSmallerNumber ; ++j){ //someSmallerNumber ~ 15
resultArray[j] = x[j] * someFunction(resultArray[j]);
}
++x; //increment pointer to the first element of the array
// do some more stuff
}
编辑: 我在外循环中使用 ++x
的原因是如果我使用 x[outerIndex+innerIndex]
而不是只是 x[innerIndex]
我会在每次迭代中执行 许多 更多的加法,这是一个重代数的算法,所以我试图从中挤出一些性能。
我想指出,我的算法从不尝试读取不存在的内存。这只是一个处理速度问题,我试图不重新计算当前数组索引的次数超过我必须的次数。这运行得非常好,我很满意。
现在我正在尝试用 Java(Java 不完全是我的专业领域)实现类似的算法。然而,我确实知道 Java 并没有真正让您访问指针并将所有内容都作为对象来处理。当然,我的问题是,是否有一种高效方法来执行与 ++x
等效的操作,其中 x
是第一个元素的地址Java 中的数组?有没有办法改为删除数组的第一个元素?如果它不是内置 Java 数组操作的一部分,是否有好的快速算法可供查看?
提前致谢! =)
最佳答案
Java 不是 C++。您在 C++ 中为提高速度所做的事情不一定适用于 Java。这是其中一个案例。
如某些人所说,在 Java 中使用 for(int val : x) 不会给您带来任何优势:
for(int i = 0; i < x.length; i++)
{
int val = x[i];
}
引用这里; http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.2
人们在这里所说的关于 VM 可以在运行时免费进行优化的说法是正确的。
所以,是的,你确实需要被打得头破血流 :-)。尽管 Java 和 C++ 看起来很相似,但在所有情况下,您在一个中所做的与在另一个中所做的并不相同:要编写好的 Java,您必须从 Java 的角度进行思考;对于 C++,您必须从 C++ 的角度思考。
关于java - 等同于在 Java 中递增 C/C++ 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5300275/