我在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类?
答案 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*>());
}