2013-02-24 70 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是空的在此操作之后。