當我運行下面的代碼,在我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 *向量,並且每個向量僅在迭代中持續。稍後解引用指針是未定義的行爲,並且一切都是可能的。 –