当我运行下面的代码时,在trainingVector
我得到:
{(10,0),(10,0),(10,0)...}
而不是:
{(0,0),(1,0),(2,0)...}
如何使这项工作正常?
vector< vector< double > * > trainingVector;
for(int i=0;i<10;i++){
vector<double> ok (2,0);
ok[0]=i;
trainingVector.push_back(&ok)
}
答案 0 :(得分:4)
只是不要使用指针。
std::vector<std::vector<double>> trainingVector;
for (int i = 0; i < 10; ++i) {
std::vector<double> ok(2, 0);
ok[0] = i;
trainingVector.push_back(ok);
}
另请考虑使用Boost.MultiArray。
答案 1 :(得分:2)
您现在使用的方法将无法正常工作,因为每个向量ok
对象的生命周期仅在迭代中持续超出范围并死亡。
你需要这样做:
vector< vector< double > * > trainingVector;
for(int i=0;i<10;i++){
vector<double> *ok = new vector<double>(2,0);
(*ok)[0]=i;
trainingVector.push_back(ok);
}
请注意,您需要稍后手动释放每个内部矢量。或者你会得到内存泄漏。
for(int i=0;i<10;i++){
delete trainingVector[i];
}
或者,您可以在没有指针的情况下一起完成:
vector< vector< double > > trainingVector;
for(int i=0;i<10;i++){
vector<double> ok(2,0);
ok[0]=i;
trainingVector.push_back(ok);
}
虽然后一种方法意味着在将内部矢量放入外部矢量时复制内部矢量。