2015-07-05 168 views
-3

我試圖創建我已經在一個類中定義 一個數據類型的矢量C++向量元素訪問

vector<MYdatatype> myVector; 

但是當我嘗試使用一個for循環來訪問向量中的元素

for(int i=0; i<myVector.size();i++) 

我收到一條錯誤消息,告訴向量超出範圍Debug斷言失敗的行932!

這是我的代碼

vector <Road_Segment> Unvisited;//the vector 

for (i = 0; i<Unvisited.size(); i++) 
{ 
    cur_node = Unvisited[0];//current node to visit 

    find_node_neighbers(cur_node.end_station.ID, end, T_R); 

當我試評for循環我沒有得到錯誤信息

任何幫助,將不勝感激

+0

你擦除從'Unvisited'循環裏面的一些元素? – Miki

+0

@Miki這不會引起問題,因爲它也會調整'Unvisited.size()',所以循環會更快地退出。 –

+2

這應該在調試器中運行。斷言將彈出並顯示給您調用堆棧,然後您可以在其中查看哪個索引是錯誤的。你的循環有多個潛在的失敗的地方,這是實際的問題仍然是一個謎;我們不介意讀者。 – WhozCraig

回答

2

這條線:

cur_node = Unvisited[0]; 

應該是:

cur_node = Unvisited[i]; 

否則,它只會反覆訪問第一個元素。

但如果你只需要每一個元素上執行操作,您應該使用foreach循環,而不是:

for (const Road_Segment& cur_node : Unvisited) { 
    // I'm guessing "neighbers" is just a typo, but that's what was in the question 
    find_node_neighbers(cur_node.end_station.ID, end, T_R); 
} 

這可以讓你避免與指數和這樣的任何問題。或者,如果你需要實際修改每一個元素,而不是僅僅使用它,只需刪除const

for (Road_Segment& cur_node : Unvisited) { 
    // do something that modifies cur_node 
} 
+2

如果你需要編輯'element',那麼你需要擺脫'const'? –

+0

@ Shaktal是的,這是正確的。我會將其添加到答案中。 –

+0

即使輸入的for循環應該是? –