用值替换列表中的元素,以新列表结尾
Posted
技术标签:
【中文标题】用值替换列表中的元素,以新列表结尾【英文标题】:Replace elements in list from element with value to end with new list 【发布时间】:2013-02-24 02:36:00 【问题描述】:我在板上有路径,比如索引对列表,比如
list<pair<int,int> > *path;
当角色到达障碍物时,我需要用新路径替换所有从当前位置到结束的路径,但要保存从起点到障碍物的路径相同(以澄清一个小角色具有起点和目标单元格并从起点移动到终点并返回并再次重复。为了避免大量计算,我会尝试保存没有障碍的部分路径,并将旧部分替换为从障碍到结束的新部分)。 有没有不重复的简单方法?
稍后编辑以澄清: 旧路径是 [(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),( 2,1),(2,2),(1,3),(1,4)
【问题讨论】:
我很好奇您为什么将path
设为指向列表的指针,而不是列表?
你到底想做什么?为什么会出现问题(当您遇到障碍物时,您的路径会到达障碍物,只需后退一步再试一次)?我隐约觉得你在找std::list::splice
,但从你的问题很难看出。
@us2012 我添加了我想要实现的目标
【参考方案1】:
如果我正确理解您的问题:您有一个列表 path
从 start
到 destination
,它在中间的某个地方遇到了障碍(您必须知道在哪里,所以假设您有一个有效的 @987654324 @ 指向障碍物)。您还有一个从*(obstacle - 1)
到destination
的newpath
,并且您想将这两条路径剪切并粘贴在一起。这就是你可以做到的方式(我在这里假设list
s 而不是list*
s,但如果你真的需要,你可以轻松地重写它以使用指针):
//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
在此操作后为空。
【讨论】:
以上是关于用值替换列表中的元素,以新列表结尾的主要内容,如果未能解决你的问题,请参考以下文章