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

时间:2011-12-02 02:31:18

标签: c++ pointers vector reference

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

2 个答案:

答案 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);
}

虽然后一种方法意味着在将内部矢量放入外部矢量时复制内部矢量。