2013-02-24 72 views
0

我在板的路徑一樣喜歡替換列表中的元素與新的列表

list<pair<int,int> > *path; 

當角色達到障礙,我需要在路徑替換所有從當前位置到對索引列表結束以新路徑結束,但保存從開始到障礙路徑相同(澄清一個小字符有起始和目的地單元格,並從開始到目的地移動,然後再次重複,以避免很多計算,我會盡量保存部分路徑沒有障礙,只是用新的障礙物替換舊的部分)。 有沒有簡單的方法來做到這一點沒有迭代?

稍後編輯以澄清: path old是[(0,0),(0,1),(1,1),(1,2),(1,3),(1,4)] (1,1),(2,...,)的新路徑搜索新路徑, 1),(2,2),(1,3),(1,4)],所以我需要替換舊路徑(1,1),(1,2),(1,3),(1, 4)與(1,1),(2,1),(2,2),(1,3),(1,4)

+2

我很好奇你爲什麼讓'path'指向列表而不是列表? – dasblinkenlight 2013-02-24 02:48:23

+0

你到底在做什麼?爲什麼這是一個問題(當你遇到障礙時,你的路徑到達障礙,只需返回一步,再試一次)?我隱約覺得你正在尋找'std :: list :: splice',但很難從你的問題中知道。 – us2012 2013-02-24 03:20:23

+0

@ us2012我添加了我想要實現的功能 – Damir 2013-02-24 03:31:11

回答

1

如果我正確理解你的問題:你有一個列表pathstartdestination,它在中間某處遇到障礙(你必須知道在哪裏,所以假設你有一個有效的指向障礙的list<...>::iterator obstacle)。您還有一個newpath*(obstacle - 1)destination,並且您想要將這兩條路徑剪切並粘貼在一起。這是你如何能做到這一點(我假設list!而非list*這兒,但如果你真的需要,你可以很容易地把它改寫與指針工作):

//kill the wrong bit of the old path 
path.erase(obstacle, path.end()); 
//append the correct newpath 
path.splice(path.end(), newpath, newpath.begin(), newpath.end()); 

注意newpath是空的在此操作之後。