移动向量会使迭代器失效吗?

2023-12-06

如果我有一个向量迭代器a,然后我移动构造或移动分配向量b from a,该迭代器是否仍然指向同一个元素(现在在向量中)b)?这就是我在代码中的意思:

#include <vector>
#include <iostream>

int main(int argc, char *argv[])
{
    std::vector<int>::iterator a_iter;
    std::vector<int> b;
    {
        std::vector<int> a{1, 2, 3, 4, 5};
        a_iter = a.begin() + 2;
        b = std::move(a);
    }
    std::cout << *a_iter << std::endl; // Is a_iter valid here?
    return 0;
}

Is a_iter至今仍然有效a已移入b,或者迭代器是否因移动而失效?以供参考,std::vector::swap 不会使迭代器失效.


虽然假设可能是合理的iterators 后仍然有效move,我认为该标准实际上并不能保证这一点。因此,迭代器在执行之后处于未定义状态move.


我在标准中找不到参考资料特别指出在 a 之前存在的迭代器move仍然有效after the move.

从表面上看,假设iterator is 通常作为指向受控序列的指针来实现。如果是这样的话,那么迭代器在之后仍然有效move.

但实施一个iterator是实现定义的。意思是,只要iterator在特定平台上满足标准规定的要求,可以以任何方式实现。理论上,它可以作为返回指针的组合来实现vector类和索引。如果that's在这种情况下,迭代器将在move.

无论是否iterator实际上以这种方式实现是无关紧要的。它可以通过这种方式实施,因此没有标准的具体保证move迭代器仍然有效,但你不能假设它们是有效的。还要记住,有is迭代器之后的这样的保证swap。此前的标准对此进行了明确的明确。也许这只是标准委员会的一个疏忽,没有对迭代器做出类似的澄清。move,但无论如何都没有这样的保证。

因此,总而言之,你不能假设你的迭代器在经过一段时间后仍然很好。move.

EDIT:

草案 n3242 中的 23.2.1/11 指出:

除非另有说明(明确或通过定义 函数(就其他函数而言),调用容器成员 函数或将容器作为参数传递给库函数 不得使对象的迭代器无效或更改对象的值 在那个容器内。

这可能会导致人们得出这样的结论:迭代器在经过一段时间后仍然有效。move,但我不同意。在您的示例代码中,a_iter是一个迭代器vector a。之后move,那个容器,a肯定已经改变了。我的结论是上述条款不适用于本案。

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

移动向量会使迭代器失效吗? 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲

随机推荐

  • C中不使用信号量的数据同步

    我需要在我的代码中进行数据同步 目前 我正在访问中断内以及本地函数中的全局值 如果中断调用频繁 则可能会损坏数据 我需要避免这种情况 我的代码中没有使用操作系统 因此无法使用信号量 使用与信号量类似的锁定方法可能会解决我的问题 任何帮助 将
  • 存储 PBKDF2 加密密码时使用什么数据类型?

    我正在使用 SimpleCrypto Net 来加密我的密码 据我所知 它使用 PBKDF2 和指定的盐和迭代次数 我想知道在数据库中设置密码列最适合我的数据类型是什么 从代码来看 结果是一个 64 字节的 Base64 编码密钥 考虑到
  • 在同一个azure web应用程序上创建虚拟目录

    我有一个在 Azure 上运行的应用程序 我需要复制该应用程序 以便不同的用户可以访问例如 site com s1 和 site com s2 并单独使用它们 应用程序是一样的 数据库会变 我尝试为我的应用程序创建一个虚拟目录 但每次都会遇
  • 检查窗口打开

    var windowUrl var windowName mywin var w window open windowUrl windowName windowSize w document write html w document cl
  • 使用不同的.Net 语言?

    是否有不同受欢迎程度的细分 Net 语言可用的 有谁知道任何提供此信息的调查 或者即使有可能确定这一点 Update 答案是not不同 Net 语言的列表 我希望看到显示每种 Net 语言的相对使用 流行程度的统计数据 谢谢 如果你像我一样
  • 访问受 Cloudflare 保护的网页

    首先 我想道歉 以防我的问题可能无法提供足够的连接或任何其他问题 我现在正在手机上输入此内容 因此 我正在开发一个项目 需要我在网页中自动执行任务 为了做到这一点 第一步是首先访问该页面 但我遇到了一个障碍 我尝试过搜索和想通了也无济于事
  • 如何使用 C# 迭代和统计 Word 文档中的修订次数?

    我一直在寻找这个问题 但找不到任何答案 所以希望这里的人可以提供帮助 我正在用 C 编写一个 WinForms 应用程序 其中我使用 Word Application Compare Documents 来比较两个文档并获取一个结果文档 其
  • shouldAutorotate To InterfaceOrientation:从未调用过

    我在 部署信息 下将支持的界面方向设置为除纵向倒置之外的所有方向 我想重写 shouldAutorotateToInterfaceOrientation 以实现自定义行为 即根据条件支持景观 由于限制 自定义视图转换 我只有一个视图控制器
  • 如何使用 AVAudioPlayer 在 iPhone sdk 中暂停和恢复同一首歌曲

    我想暂停这首歌 然后在 iPhone 中使用编程方式从该持续时间点继续播放 当我尝试暂停歌曲并再次开始播放我暂停的歌曲时 如何对其进行编码 是否有任何直接属性或建议任何代码可以解决我的问题 void playMusic path NSBun
  • 如何使用 Nuxt 2 转译 node_modules 中的依赖项?

    我读过有关转译的问题node modulesNuxt 但据说新的 Nuxt 2 已经解决了这个问题transpile选项中的nuxt config js file https nuxtjs org api configuration bui
  • 从 Beam 管道连接 google cloud sql postgres 实例

    我想从在谷歌数据流上运行的 apache beam 管道连接谷歌云 sql postgres 实例 我想使用 Python SDK 来完成此操作 我无法为此找到适当的文档 在云SQL如何指导我没有看到任何数据流文档 https cloud
  • Xcode 4.5 中的当前位置错误

    在 Xcode 4 5 中 苹果引入了苹果新地图 我的应用程序大量需要地图服务 我注意到在我的应用程序中它显示了错误的当前位置 直到您删除应用程序并重新打开它才显示正确的当前位置 有时不会 顺便提一下 当我连接到 4G 时 它显示的当前位置
  • javax.el.PropertyNotWritableException:value =“”:设置操作的非法语法[重复]

    这个问题在这里已经有答案了 我有这个表格
  • Javascript:检查两个div之间的碰撞

    有什么方法可以检查名称为 character 的 DIV 是否与名称为 ground 的 DIV 重叠 我想用干净的 Javascript 来做到这一点 我知道 jQuery 更好 但这就是我不想要的 我看到了这个帖子 检查某些div之间的
  • Solr:在数据导入期间转换逗号分隔字段

    我正在使用 Solr 3 5 0 我正在从 JDBC 数据源导入 并且有一个分隔字段 我希望将其拆分为各个值 我正在使用RegexTransformer但我的领域没有被分割 样本值 Bob Carol Ted Alice 数据配置 xml
  • 编译并运行动态代码,而不生成EXE?

    我想知道是否可以编译并运行存储的代码 而不生成 exe 或任何类型的其他文件 基本上从内存中运行该文件 基本上 主应用程序将具有一些存储的代码 可能会更改的代码 并且需要编译代码并执行它 无需创建任何文件 创建文件 运行程序 然后删除文件不
  • 实体框架DbContext无需查询并通过外键更新值

    我有一个更新一些表的方法 对于更新我需要首先获得TestProcess 但我不喜欢这样 我怎样才能更新TestProcess没有select firstOrDefault 操作 仅用于更新操作 方法示例 public void Update
  • 如何动态地分块重塑矩阵? [复制]

    这个问题在这里已经有答案了 假设我有A 1 8 11 18 21 28 31 38 41 48 现在我想将所有内容从第 4 列向前移动到行位置 我该如何实现这一目标 A 1 2 3 4 5 6 7 8 11 12 13 14 15 16 1
  • 如何处理“变量时间”(DATE、双精度、8 字节)?

    我似乎找不到任何有关 变体时间 的信息 DATE 双精度 8 字节变量 被处理 我有一个不同的时间 A 哪个值是 41716 892329 如果我转换 A 使用 变体时间到系统时间 or COle日期时间 我明白 2014 03 18 21
  • 移动向量会使迭代器失效吗?

    如果我有一个向量迭代器a 然后我移动构造或移动分配向量b from a 该迭代器是否仍然指向同一个元素 现在在向量中 b 这就是我在代码中的意思 include