我正在尝试使用这样声明的向量矩阵:
vector<vector<Neurone*>* > Neurones;
顺便说一下,我已经创建了一个类神经元。
这是代码:
NeuralNetwork::NeuralNetwork(vector<int> NeuroneNumbers, vector<vector<vector<double>* >* > lw)
{
for (int i = 0; i < NeuroneNumbers.size(); i++)
{
if (i == 0)
{
Neurones.push_back(new vector<Neurone*>());
for (int j = 0; j < NeuroneNumbers[i]; j++)
{
Neurones[i]->push_back(new Neurone(new Neurone[0], new double[0]));
if (j == NeuroneNumbers[i] - 1)
{
(*Neurones[i])[j]->Value = 1;//Here is the error ! with i=0 j=0 segmentation fault !
}
}
}}
答案 0 :(得分:0)
std::vector
的矩阵实际上是std::vector
的{{1}}。
以下是一个例子:
std::vector
[编辑]
我相信,您确实需要使用#include <iostream>
#include <vector>
int main() {
// this is actually a 2D "array"
std::vector< std::vector<int> > v;
int N = 5; // rows
int M = 5; // columns
v.resize(N); // create N rows
for(int i = 0 ; i < N ; ++i)
for(int j = 0 ; j < M ; ++j)
v[i].push_back(j); // fill the matrix
//print
for(int i = 0 ; i < N ; ++i)
for(int j = 0 ; j < M ; ++j)
std::cout << v[i][j] << "\n";
return 0;
}
来达到目的。
答案 1 :(得分:0)
Neurones[i]->push_back(new Neurone(new Neurone[0], new double[0]));
你为什么要这样做? new Neurone[0]
的含义是什么?如果您打算通过此语句创建Neurone
,那么实际上您将一个Neurone
对象传递给另一个constructor
。
Neurones[i])[j]
将为您提供指向Neuron的指针。因此,如果Neuron
类具有名为Value
的 public 成员变量,则可以通过
Neurones[i])[j]->Value = 1; // no need the * operator
但是,您不必要地使用指针,并且使用方法容易出错。您的代码可以大大简化:
vector<vector<Neurone*> > Neurones;
NeuralNetwork::NeuralNetwork(vector<int> NeuroneNumbers, vector<vector<vector<double>* >* > lw)
{
for (int i = 0; i < NeuroneNumbers.size(); i++)
{
if (i == 0)
{
vector<Neurone*> neuronVector;
for (int j = 0; j < NeuroneNumbers[i]; j++)
{
Neurone neuron=new Neurone(/*constructor params*/); // create a Neuron object
if (j == NeuroneNumbers[i] - 1)
{
neuron.Value = 1;
}
neuronVector.push_back(neuron);
}
Neurones.push_back(neuronVector);
}}