gpt4 book ai didi

c++ - 迭代正在变化的 std::list 的有效方法?

转载 作者:可可西里 更新时间:2023-11-01 17:56:57 26 4
gpt4 key购买 nike

我正在尝试遍历 std::list 但有一个问题 - 在迭代期间执行的操作可能最终会在列表中添加或删除元素。在这种情况下添加不是问题,但删除可能最终会使列表中的任何迭代器失效,包括序列中的当前项或下一项。

决定修改列表的点远离迭代循环 - 调试器在两者之​​间的调用堆栈中显示 40 个函数调用。因此,无法根据删除修改迭代器。

我唯一能想到的就是在开始时复制列表并对其进行迭代,测试每个元素以确保它仍在主列表中。这是一个 O(n^2) 命题,我想尽可能避免。

最佳答案

你有三个选择:

  1. 就像你说的那样制作列表的本地拷贝
  2. 当迭代器失效时重新开始(并且可能跳过 n 次迭代?[with continue])

  3. 编辑:就像 Pubby 所说的那样,将删除的元素标记为过期,并且在添加元素时使用跳过 n 迭代的东西:)

迭代器不允许通过索引访问,所以这使得为您的问题想出一个优雅的解决方案变得有点困难。

关于c++ - 迭代正在变化的 std::list 的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com