java - 等同于在 Java 中递增 C/C++ 指针?

标签 java c++ arrays pointers programming-languages

我确实有种感觉,人们会试图敲打我的脑袋并说“你不应该那样做!” (我很清楚这个事实);尽管如此,这是我的问题:

假设您有以下 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/

相关文章:

c++ - 如何使用距离公式用纯色填充我的圆圈?

c++ - 以 std::string 为键的最有效关联容器?

java - 使用 Collections.sort() 找不到符号错误排序 Collection

java - 如何在 onClickListener 中获取点击位置?

java - 我有 Netbeans 8.1,它仅支持 C/C++,并且支持 java。

c++ - 将指针转换为引用时会发生复制操作吗?

C - 对数组描述进行排序

在函数内调用数组

javascript - 将 setTimeout 与 Canvas 结合使用以打印数组中的文本

java - 将数据从数据库写入文件时保留换行符