【问题标题】:cpp std::list add new elements with steppingcpp std::list 通过步进添加新元素
【发布时间】:2012-05-29 19:44:04
【问题描述】:

我有两个带有对象的std::listsource_listnew_list。目标是将对象从new_list 添加到source_list,从position_at_source_to_adding_new_fromsteps_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 编写代码,但也不喜欢这样。

标签: c++ list sorting


【解决方案1】:

无需调用advance,只需根据需要多次调用++iterator。每次调用后,将迭代器与end() 进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2015-01-24
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多