关于如何在c ++和Java之间转换特定代码行的简单问题。我一直在学习神经网络,我已经开始用我最熟悉的Java语言编写自己的语言。到目前为止,将代码从C ++转换为Java非常简单,但是我遇到了一个小问题。我对如何将这一特定代码行转换为Java等价物感到困惑,我通过搜索找不到任何特定于此问题的内容。
原始代码是:
Struct SNeuron {
//the number of inputs into the neuron
int m_NumInputs;
//the weights for each input
vector<double> m_vecWeight;
//ctor
SNeuron(int NumInputs);
};
我的代码是:
public class SNeuron {
public int m_NumInputs; // the number of inputs into the neuron
public ArrayList<Double> m_vecWeight = new ArrayList<Double>(); // the weights for each input
// ctor
我的问题是,如何转换:
SNeuron(int NumInputs);
进入Java等价物?根据我的阅读,Structs似乎不是Java使用的功能,所以我只是苦苦挣扎以了解该代码行在其使用的上下文中究竟做了什么。
答案 0 :(得分:1)
public class SNeuron
{
// the number of inputs into the neuron
public int m_NumInputs;
// the weights for each input
public List<Double> m_vecWeight = new ArrayList<Double>();
// ctor
SNeuron(int NumInputs) {
m_NumInputs = NumInputs;
}
答案 1 :(得分:1)
鉴于代码中的注释,我非常确定等效的是:
public class SNeuron {
public final double[] weights;
public SNeuron(int numInputs) {
weights = new double[numInputs];
}
}
你真的不想使用List<Double>
,它会慢很多并占用更多的内存 - 这样一个列表中的每个双重变成一个完整的对象,并带有所有相关的开销。
答案 2 :(得分:0)
在C ++中,SNeuron(int NumInputs);
是构造函数声明int
,它包含在类声明中。
你不能用Java做到这一点 - 实际上所有构造函数以及所有函数都在类声明中内联。换句话说
SNeuron(int NumInputs); // within the class declaration
SNeuron::SNeuron(int NumInputs) : m_NumInputs(NumInputs){} // In a translation unit
映射到
SNeuron(int NumInputs) {
m_NumInputs = NumInputs;
}
但请注意,将m_
用于Java 字段是特殊的。