【发布时间】:2012-05-29 19:44:04
【问题描述】:
我有两个带有对象的std::list:source_list 和new_list。目标是将对象从new_list 添加到source_list,从position_at_source_to_adding_new_from 和steps_between_new 开始。
steps 的问题:source_list 可能太短,new_list 可能太大(或steps 太大),在执行 std::advance(it, steps_between_new) 时,迭代器可能超出 source_list 和它将是undefined behavior。
如何在std::advance 之前/之后检查迭代器以确保我们在范围内?当new_list 有更多对象可以通过它们之间的步骤放置时 - 需要简单地将对象添加到源列表的末尾。
ps。对不起我的英语,不是母语很难解释。欢迎对我的文字进行任何更正。谢谢。
【问题讨论】:
-
@Jon 不,因为,考虑到两者的大小,这是找到合并两个列表的最佳方法的任务。不仅是“如何不越过 end()”。
-
所以您阅读了该问题的答案,但它们没有帮助?
-
@Jon 1) 首先,建议线程中描述并被作者接受的方法无效,因为它使用
distance并给出不必要的计数(从 list.begin() 移动到 list .end()) 每次迭代。 2)他们只与一个列表交互。在我的问题中,我们有两个列表,其中任何一个都可以在另一个之前完成,这也需要考虑。我正在尝试使用 David 建议的简单++iterator编写代码,但也不喜欢这样。