当我运行下面的代码,在我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)
}
如果每个向量的寿命只持续在迭代中,他不会得到所有十个推入引用的输出,只是最后一个或没有,这取决于他检查父向量的时间。问题在于他不是每次都创建一个新的向量,而是引用同一个(相同的内存位置,在堆栈中) – Wizetux
实际上,他所看到的(引用同一个)仅仅是未定义行为的结果他是通过访问已经超出范围的东西而造成的。 – Mysticial
@Wizetux:*错误*。代码每次创建一个* new *向量,并且每个向量仅在迭代中持续。稍后解引用指针是未定义的行为,并且一切都是可能的。 –