如何在每次迭代中创建新的向量

How to create new vector in each iteration?

本文关键字:创建 向量 迭代      更新时间:2023-10-16

当我运行下面的代码时,在我的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)
}

就是不要用指针。

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。

您现在使用的方法将不起作用,因为每个vector 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);
}

尽管后一种方法意味着在将内部向量放入外部向量时复制内部向量。