C++ 用值替换列表中的元素,以新列表结束

C++ 用值替换列表中的元素,以新列表结束,c++,stl,C++,Stl,我在板状索引对列表中有路径,如 list<pair<int,int> > *path; list*路径; 当角色到达障碍物时,我需要用新路径替换从当前位置到终点的所有路径,但要保存从起点到障碍物的路径不变(为了澄清一个小字符有起始单元格和目的单元格,从起始单元格移动到目的单元格,然后再重复相同的操作。为了避免批量计算,我会尝试保存一部分没有障碍物的路径,并用新的从障碍物到终点的路径替换旧的部分)。 有没有简单的方法不用迭代就能做到这一点 稍后编辑以澄清: 旧路径为[(

我在板状索引对列表中有路径,如

list<pair<int,int> > *path;
list*路径;
当角色到达障碍物时,我需要用新路径替换从当前位置到终点的所有路径,但要保存从起点到障碍物的路径不变(为了澄清一个小字符有起始单元格和目的单元格,从起始单元格移动到目的单元格,然后再重复相同的操作。为了避免批量计算,我会尝试保存一部分没有障碍物的路径,并用新的从障碍物到终点的路径替换旧的部分)。 有没有简单的方法不用迭代就能做到这一点

稍后编辑以澄清:
旧路径为[(0,0),(0,1),(1,1),(1,2),(1,3),(1,4)],障碍物位于单元格(1,2)上,因此角色将[(0,0),(0,1),(1,1)]搜索新路径,例如[(1,1),(2,1),(2,2),(1,3),(1,4)],因此我需要将旧路径(1,1),(1,2),(1,3),(1,4)替换为(1,1,1),(2,2),(1,2),(1,4)如果我正确地理解了你的问题:你有一个列表“代码>路径<代码>从<代码>开始<代码>到代码>目的地< /代码>,它在中间某个地方遇到障碍(你必须知道在哪里,所以让我们假设你有一个有效的<代码>列表::指向障碍物的迭代器障碍< /代码>)。您还有一个从
*(障碍-1)
目的地的
新路径
,您希望将这两条路径剪切并粘贴在一起。这就是您可以做到的方法(我假设
列表
s而不是
列表*
s,但如果您确实需要,您可以轻松地重写它以使用指针):


请注意,执行此操作后,
newpath
是空的。

我很好奇为什么将
path
设置为指向列表的指针,而不是列表?您到底想做什么?为什么会出现问题(当您遇到障碍物时,您的路径到达障碍物,只需返回一步,然后重试)?我隐约感觉你在寻找
std::list::splice
,但很难从你的问题中分辨出来。@us2012我添加了我想要实现的目标
//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());