STL迭代器是否保证集合更改后的有效性?

2024-05-04

假设我有某种集合,并且我在它的开头获得了一个迭代器。现在假设我修改了该集合。无论集合或迭代器的类型如何,我仍然可以安全地使用迭代器吗?

为了避免混淆,以下是我讨论的操作顺序:

  1. 获取集合的迭代器。
  2. 修改集合(显然 不是其中的元素,而是集合本身)。
  3. 使用步骤1中获得的迭代器。根据STL标准它仍然有效吗?!

取决于容器。例如如果它是一个vector,修改容器后所有迭代器都可以失效。然而,如果它是一个list,与修改位置无关的迭代器仍然有效。

  • 当向量的内存被重新分配时,向量的迭代器就会失效。此外,在向量中间插入或删除元素会使指向插入或删除点之后的元素的所有迭代器无效。因此,如果您使用,则可以防止向量的迭代器失效reserve()预分配向量将使用的尽可能多的内存,并且所有插入和删除都在向量的末尾。[1] http://www.sgi.com/tech/stl/Vector.html#5

  • 迭代器失效的语义deque如下。Insert(包括push_front and push_back) 使所有引用 a 的迭代器无效deque. Erase在一个中间deque使所有引用的迭代器无效deque. Erase在一个的开始或结束deque(包括pop_front and pop_back) 仅当迭代器指向已删除的元素时才使迭代器无效。[2] http://www.sgi.com/tech/stl/Deque.html#3

  • Lists 具有一个重要的属性,即插入和拼接不会使列表元素的迭代器无效,并且即使删除也只会使指向被删除元素的迭代器无效。[3] http://www.sgi.com/tech/stl/List.html

  • Map具有一个重要的属性,即向 a 中插入一个新元素map不会使指向现有元素的迭代器无效。从映射中删除元素也不会使任何迭代器无效,当然,实际指向正在删除的元素的迭代器除外。[4] http://www.sgi.com/tech/stl/Map.html(同样适用于set, multiset and multimap)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL迭代器是否保证集合更改后的有效性? 的相关文章

  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • PHP 中的 is_callable 和 function_exists 到底有什么区别?

    我正在开发一个项目 在该项目中我使用了旧版本中已弃用的函数 但不希望我的脚本在旧版本中使用时停止 所以我检查该函数是否存在 如果不存在则创建它 有什么区别function exists and is callablePHP 中哪个更好用 i
  • 以编程方式将 Word 文件另存为图片

    我想将Word文档的第一页另存为图片 使用 C 有什么方法可以做到这一点 您可以将 Word 文档打印到 XPS 文档 在 WPF Net 3 5 应用程序中打开它 并使用 WPF 框架的文档和图像功能将第一个内部固定页面对象转换为位图 如
  • 在bash中将两个变量相除

    我试图在 bash 中划分两个 var 这就是我得到的 var1 3 var2 4 echo var1 var2 我总是遇到语法错误 有谁知道出了什么问题吗 shell 解析仅对整数除法有用 var1 8 var2 4 echo var1
  • GridView BoundField 打破长字符串

    我的 GridView 中的 BoundField 之一有很长的字符串没有空格并调整 GridView 的大小 如何打破 GridView 列中的长字符串 我找到了适合我的情况的解决方案
  • 在 C# 中同步闪烁标签

    我创建了一个BlinkingLabel类 源自Forms Label 其中有一个Forms Timer这允许我启用和禁用闪烁效果 我创建了 4 个标签BlinkingLabel类型 我的问题是 如果所有 4 个标签在不同时间闪烁 则闪烁效果
  • 如果满足条件,如何对连续行进行子集化

    我正在使用 R 来分析多个时间序列 1951 2013 其中包含每日最高和最低温度值 数据具有以下结构 YEAR MONTH DAY MAX MIN 1985 1 1 22 8 9 4 1985 1 2 28 6 11 7 1985 1 3
  • Eclipse/Idea 忽略 Maven Java 版本配置

    I have
  • Android:如何管理同一应用程序使用的多个库中的公共代码库

    NOTE 这个问题是基于我在以下讨论中收到的答案 Android 2个具有相同包的aar库 https stackoverflow com questions 57347039 android 2 aar libraries with th
  • 预期为 BEGIN_ARRAY,但实际为 BEGIN_OBJECT |数组列表问题

    我正在使用 Gson 库来保存和检索玩家对象的 ArrayList 我的 onStop Override protected void onStop super onStop SharedPreferences prefs getShare
  • java中有没有更好的方法来获取当前类变量?

    现在我正在做这样的事情 private static Logger logger LoggerFactory getLogger MasterController class 有没有比使用类名称 MasterController 更好的方法
  • 运行迁移时出错:sqlalchemy.exc.CompileError:Postgresql ENUM 类型需要名称

    当我第一次尝试运行升级时遇到此错误 尽管我已经给了它一个 name 属性 但它似乎在性别类型枚举上失败了 有解决办法吗 有什么方法可以查看生成的 SQL 内容吗 这是我的 models py 这是我运行flask ext migrate u
  • 实体框架和多线程

    我有一个处理一些消息的 WCF 服务 我使用 EntityFramework 来检索消息 我将这些消息添加到线程池队列中 然后处理它们 处理完所有消息后 我调用实体框架上的更新来更新消息的状态 在此操作期间 我随机收到错误 在没有先在具有相
  • 显示具有相同节点值的多个 XML 数据条目

    我有一个 XML 文档 其中包含课程信息 如下所示
  • 图像处理编程

    我想知道是否有任何方法可以使用某种编程语言检测图像中对象的位置 例如 如果我有一个球的图像 每 100 毫秒更新一次 是否可以通过某些程序使用某些东西来获取球的坐标 看一下OpenCV http opencv willowgarage co
  • 绑定到 ListView 项目从视图模型中点击的属性

    我正在尝试使用 itemtapped 属性将事件绑定到菜单页面上的 ListView 目前我在我的应用程序中使用 MVVM Xamarin 表单实验室 框架 我想要完成的是当用户点击菜单项时应用程序导航到正确的视图 这是xaml代码
  • docs.microsoft.com 上的 .NET 平台扩展是什么?

    Microsoft Docs 中有一个框架级导航元素 称为 NET 平台扩展 https learn microsoft com en us dotnet api index view dotnet plat ext 2 1 它包含有关最近
  • 在 Matlab 中对列进行排序

    我有 2 列使用 textscan 导入的数据 数据看起来像这样 其中U is undetect and D is detect mydata 51 U 57 D 48 U 47 D my data 4x1 double 4x1 char
  • 在ubuntu 18.04上安装python 2.7

    有没有办法在 Ubuntu 18 04 上安装 Python 2 7 我尝试了这个命令 但它不起作用 sudo apt install python minimal 有没有办法手动安装 我尝试使用 python 2 7 作为不支持 pyth
  • 检查列表视图中的复选框也会检查其他随机复选框

    每当我在列表视图中选中一个复选框时 其他随机复选框也会被选中 这可能是由于列表视图回收项目所致 我也尝试过设置android focusable false 按照某些地方的建议 添加到我的布局中的复选框 但是当选中其复选框时 仍然不会调用
  • STL迭代器是否保证集合更改后的有效性?

    假设我有某种集合 并且我在它的开头获得了一个迭代器 现在假设我修改了该集合 无论集合或迭代器的类型如何 我仍然可以安全地使用迭代器吗 为了避免混淆 以下是我讨论的操作顺序 获取集合的迭代器 修改集合 显然 不是其中的元素 而是集合本身 使用