【问题标题】:Convert std::max to Java将 std::max 转换为 Java
【发布时间】:2013-03-20 23:22:24
【问题描述】:

我在 C/C++ 代码中有当前行:

double ma = *std::max_element(Dists[a], Dists[a] + size);

Dists[a] 是一个大小为size 的双整数数组

int Dists[size][size];

我正在寻找可以执行相同操作的 Java 中的等效函数。

由于“Dists[a] + size”行,我不确定这个 C/C++ 函数是如何工作的。

【问题讨论】:

  • max_element 采用开始和结束迭代器并遍历该范围。指针是随机访问迭代器,数组在传递给函数时会衰减为指针。 Dists[a] + size 是结束迭代器的地址,使用指针算法,所以它是数组的结尾,因此整个数组被迭代。这与使用std::begin(Dists[a])std::end(Dists[a]) 相同,但可能更清楚。

标签: java c++ arrays pointers


【解决方案1】:

假设您使用的是Collections,而不是实际的数组(推荐):

ArrayList<Integer> a; // initialized somewhere
...
Collections.max(a);

如果您使用的是实际的二维数组,请尝试:

int[][] c; // initialized somewhere
int i; // set somewhere
List b = Arrays.asList(ArrayUtils.toObject(c[i]));
Collections.max(b);

元素比较using their natural ordering

【讨论】:

  • 请提供如何比较Element 类。另外,您可能需要java.util.Collections#max
  • @LuiggiMendoza 抱歉,只是将其用作占位符。谢谢:)
  • 我提到使用特定类(如Element)意味着:1.您的类必须实现equalshashCode方法,或者2.提供Comparator,但是你还没有做过任何这些。
  • @LuiggiMendoza 我想这与问题中的 C++ 案例不同,其中只需要严格的弱排序比较。
  • 我不明白的是如何将双精度数组(矩阵)传递给max函数,以及如何将其替换为Java代码。
猜你喜欢
  • 1970-01-01
  • 2017-12-11
  • 2022-01-06
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多