1

いくつかの重いポインター演算を使用する C++ コードを Java に移植しています。私の問題は次のとおりです。

私がクラスとして実装したように構築された構造があります:

元の C/C++ コードでは、次の割り当てがあります。

struct mst_edge
{
    int u, v;
    double w;
}

mst_edge * tree_edges = new mst_edge[size];

int node_l = tree_edges->u;
int node_r = tree_edges->v;

このコードを Java に変換するにはどうすればよいですか? mst_edge2 番目のブロックは、C/C++ 動的配列として宣言します。しかし、コードの 3 番目のブロックでは、tree_edges を直接ポインターとして使用しています。

メモリと参照が Java によって直接処理されることを考えると、これに相当する Java は何でしょうか?

4

3 に答える 3

1

Java に相当するものは次のとおりです。

mst_edge[] tree_edges = new mst_edge[size];

int node_l = tree_edges[0].u;
int node_r = tree_edges[0].v;
于 2013-03-20T23:06:37.087 に答える
1

C/C++ の構造体は、すべてのメンバー変数を持つ Java のクラスのようなものですpublic

class MstEdge
{
    public int u;
    public int v;
    public double w;
}

通常、Java ではこれを行いません。メンバー変数はprivatepublicアクセサ メソッドを使用すると になりますが、これは に最も近いstructです。

C/C++ の配列へのポインターは、Java の単なる配列です。

MstEdge[] treeEdges = new MstEdge[size];

size nullただし、Java で配列を宣言すると、要素が存在することになるので注意してください。次のように初期化します。

treeEdges[0] = new MstEdge();  // and so on for other array positions

C/C++ のようにポインタを最初の要素への直接参照として扱うのではなく、Java では最初の要素を明示的に参照する必要があります。

int nodeL = treeEdges[0].u;
int nodeR = treeEdges[0].v;
于 2013-03-20T23:11:15.973 に答える
0

OO Java では、ゲッターを使用してプライベート メンバー変数を取得します。size は、定義した値です。

class MstEdge {
    private int u;
    private int v;
    private double w;

    public int getU() {
        return u;
    }

    public int getV() {
        return v;
    }
   .
   .
   .
}


MstEdge [] treeEdges = new MstEdge[size];

int nodeL = treeEdges[i].getU();
int nodeR = treeEdges[i].getV();
于 2013-03-20T23:09:49.047 に答える