如何将用Java编写的“ArrayList <classnod>”转换为C ++程序语言?</classnod>

时间:2013-08-17 13:51:08

标签: java c++ class arraylist

我在Java中编写了一个名为Nod.java的类。

import java.util.ArrayList;
import java.util.Arrays;

class Nod {
        int[] vol;
        String op="";
        Nod parent; 
        int adancime;

        Nod (int[] vol, String op,Nod parent,int adancime){             
            this.vol=vol;
            this.op=op;
            this.parent = parent;
            this.adancime=adancime;
            }

        public String toString() {
        return op;
        }

        public int getAdancime() {
                return adancime;
        }

        public ArrayList<Nod> getCale(ArrayList<Nod> lnoduri) {
        lnoduri.add(0, this);
        if (parent != null) lnoduri = parent.getCale(lnoduri);
        return lnoduri;
        }

        public ArrayList<Nod> getCale() 
        { return(getCale(new ArrayList<Nod>())); }
}

我想用C ++重写它,但我不知道如何用C ++重写这两个函数:

public ArrayList<Nod> getPath(ArrayList<Nod> lnoduri) {
    lnoduri.add(0, this);
    if (parent != null) lnoduri = parent.getPath(lnoduri);
    return lnoduri;
}

public ArrayList<Nod> getPath(){ 
    return(getPath(new ArrayList<Nod>())); 
}

这些函数将每个节点的路径存储到父节点。

你能帮我吗?

修改

因为这是一个相关的问题,我在这里添加。

我在Java中为“Vase”类编写了一个函数:

public ArrayList<Nod> succesori(Nod parent) {

    // "Nod" is another class.                          
    ArrayList<Nod> listTest = new ArrayList<Nod>();

    // operations/conditions;

    listTest.add(new Nod(vol,op,parent,adancime+1));
    return(listTest);
}

我想用C ++重写:

vector<Nod*> Vase::succesori(Nod *parinte)
{
    vector<Nod*> *listTest = new vector<Nod*>();

    // operations/conditions;

    listTest.insert(new Nod(vol,op,parent,adancime+1)); 
    return (*listTest);
    }

但是当我尝试执行此命令时出现错误:     listTest.insert(new Nod(vol,op,parent,adancime + 1));

IntelliSense:表达式必须具有类类型

错误1错误C2228:'。insert'的左边必须有class / struct / union

如何在listTest中添加/插入新的Nod类?

2 个答案:

答案 0 :(得分:3)

Java代码看起来有点奇怪。如果你真的想使用递归,那么我建议重写方法如下。

public void getCale(ArrayList<Nod> lnoduri) {
    if (parent != null) {
        parent.getCale(lnoduri);
    }
    lnoduri.add(this);
}

public ArrayList<Nod> getCale() {
    ArrayList<Nod> result = new ArrayList();
    getCale(result);
    return result;
}

在C ++中,我只使用一个成员函数。

std::vector<Nod*> getCale()
{
    std::vector<Nod*> result;
    for (Nod* n = this; n; n = n->_parent) {
        result.push_back(n);
    }
    std::reverse(result.begin(), result.end());
    return result;
}

答案 1 :(得分:1)

你可以直接翻译成C ++,但如果你这样做,程序可能很难维护和缓慢。请记住,默认情况下所有方法都是虚拟的,对象通过指针传递,vector替换ArrayList

virtual vector<nod*> *getCale(vector<nod*> *lnoduri) {
    lnoduri->insert(lnoduri->begin(), this);
    if (parent != nullptr) lnoduri = parent->getCale(lnoduri);
    return lnoduri;
}

virtual vector<nod*> *getCale() {
    return getCale(new vector<nod*>());
}