因此,对于我的研究小组,我试图将一些旧的C++代码转换为Java,并且遇到了一个问题,在C++代码中它执行以下操作:
method(array+i, other parameters)
Run Code Online (Sandbox Code Playgroud)
现在我知道Java不支持指针算法,所以我通过将数组+ i中的子数组复制到数组的末尾到新数组来解决这个问题,但这会导致代码运行速度非常慢(比C++慢100倍)版).有办法解决这个问题吗?我看到有人在这里提到内置方法,但是更快吗?
你的代码不仅变得更慢,而且还改变了正在发生的事情的语义:当你用C++进行调用时,没有完成数组复制,所以任何method可能适用于数组的更改都发生在原始代码中,而不是在丢弃副本.
要在Java中实现相同的效果,请更改函数的签名,如下所示:
void method(array, offset, other parameters)
Run Code Online (Sandbox Code Playgroud)
现在调用者必须传递数组中method应该考虑数组的"虚拟零"的位置.换句话说,而不是写像
for (int i = 0 ; i != N ; i++)
...
Run Code Online (Sandbox Code Playgroud)
你必须写
for (int i = offset ; i != offset+N ; i++)
...
Run Code Online (Sandbox Code Playgroud)
这将保留将数组传递给成员函数的C++语义.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |