std::vector::insert 的重载解析如何工作

2024-04-23

这是三分之二insert来自 std::vector 的方法签名:

void insert (iterator position, size_type n, const value_type& val);
template <class InputIterator>
void insert (iterator position, InputIterator first, InputIterator last);

现在,给定一个向量和一个插入调用,

std::vector<int> v;
v.insert( v.begin(), 3, 3 );

怎么第一个insert选择的是第一个而不是第二个?

我确信我天真地实现了相同的签名,但这里编译器选择了第二种(模板化)形式。

template <class T, int MAXSIZE>
class svector {
public:
  class iterator : public std::iterator<std::input_iterator_tag,T> { ... };

    // ...

  void insert (class iterator position, size_t n, const T& val){
    if( len + n > MAXSIZE ) throw std::out_of_range( "insert exceeds MAXSIZE" );
    uint32_t iPos = position - begin();
    uint32_t movlen = len - iPos + 1;
    for( uint32_t i = 0; i < movlen; i++ ){
      ele[len + n - i] = ele[len - i];
    }
    for( uint32_t i = 0; i < n; i++ ){
      ele[iPos + i] = val;
    }
    len += n;
  }

  template <class InputIterator>
  void insert (class iterator position, InputIterator first, InputIterator last){
    for( InputIterator it = first; it != last; it++ ){
      if( len + 1 > MAXSIZE ) throw std::out_of_range( "insert exceeds MAXSIZE" );
      *position = *reinterpret_cast<T*>( it );
    }
  }

您的阅读和编译器是完全正确的。

标准库的实现必须采取预防措施(通过std::enable_if或者更一般地通过SFINAE https://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error)以确保选择第二个过载only对于迭代器类型。

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

std::vector::insert 的重载解析如何工作 的相关文章

  • 使用 mono/nunit-console/4 在 Mac OS X 控制台上运行测试

    我安装了 Max OS X 10 11 1 上面装有 Xamarin 我编写了简单的测试类 只是为了测试在 Mac OS X 和 Ubuntu 上运行 Nunit 测试 该类实际上有一个返回字符串的方法 using System names
  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • FileStream 构造函数和默认缓冲区大小

    我们有一个使用 NET 4 用 C 编写的日志记录类 我想添加一个构造函数参数 该参数可以选择设置文件选项 WriteThrough http msdn microsoft com en us library system io fileo
  • EF Core 通过完全替换断开集合导航属性的更新

    使用 EF Core 5 0 我有一个 SPA 页面 可以加载Group实体及其集合Employee来自 API 的实体 var groupToUpdate await context Groups Include g gt g Emplo
  • 根据 N 个值中最小的一个返回不同的结果

    不确定如何使标题更具描述性 所以我只是从一个例子开始 我使用下面的代码位 它从枚举中选择一个方向 具体取决于四个轴中哪一个与给定方向相比形成最小角度 static Direction VectorToDirection Vector2 di
  • 类特定的新删除运算符是否必须声明为静态

    标准中是否要求类特定的 new new delete 和 delete 是静态的 我可以让它们成为非静态成员运算符吗 为什么需要它们是静态的 它们被隐式声明为静态 即使您没有键入 static
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • 使用restsharp序列化对象并将其传递给WebApi而不是序列化列表

    我有一个看起来像的视图模型 public class StoreItemViewModel public Guid ItemId get set public List
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造

随机推荐

  • 如何循环遍历文件来获取数据?

    我正在尝试进行基本登录并注册 C 控制台应用程序 但是 我需要循环遍历我的文件以查看用户输入的用户名和密码在登录时是否匹配 如果用户输入用户名和密码 我希望我的代码遍历我的文件以检查它是否是现有的用户名和密码 这是我的代码 Serializ
  • Pandas:将列转换为列表

    我有一个数据框 date member id val 2016 06 01 2377264 14 2016 06 01 289719 6 2016 06 02 289719 12 2016 06 02 2377264 1 2016 06 0
  • 如何更改 ng-repeat 中单个元素的 ng-click 行为?

    我正在重构一个用角度编写的表格 目前 ng repeat 用于创建多个表行 其中任何行在单击时都会重定向到给定的 ui sref tbody tr class tablebox content td class name user name
  • JAVA JNI C 调试器

    是否有任何调试器可以帮助调试 Java JNI 程序以及 C 库 我应该能够在Java中从static void main开始调试程序 并继续调试并在本机c函数中放置断点 然后在控制权从C转移到Java后继续在Java中调试 Java 虚拟
  • 在运行时执行 C# 或 VB.NET 代码

    最近在 Codility com 上花了一些时间 我突然想到了这个问题 它们如何执行您创建的代码 特别是与 C 和 VB NET 有关的代码 我基本上想知道的是 如何在表单上的文本框中输入一些代码 然后运行该代码 如果没有第三方工具 这可能
  • 为 Windows 开发计划任务

    我必须使用 C net 开发一个必须每天运行一次的应用程序 它最多只运行一分钟 因此开发 Windows 服务有点大材小用 计划任务是合适的方法 但是 我对应用程序如何传达其结果有一些疑问 如何向任务调度程序指示任务失败 这是通过程序的退出
  • 查找包含“inf”或“nan”的项目的索引

    以下是一个示例1 item在我的清单中 array 1 2 3 43 83 92 12 54 93 23 94 83 23 inf inf inf inf inf 83 33 33 83 13 83 83 nan 83 73 43 43 4
  • 如何避免实体框架 TPT 继承中的多态行为,以便有效地查询基类型

    Overview 我首先使用实体 框架 4 3 代码和流畅的界面来设置我的 DbContext 我有一个基地Item具有继承此类型的其他类型的类 例如Event BlogPost 论坛主题 WikiPage等等 这些继承的类型与我认为实体框
  • React-relay 嵌套突变后未获取有效负载

    这是一个后续问题这个答案 https stackoverflow com a 34776023 2030321早些时候在 SO 上发布了有关反应中继突变警告的文章 在这种情况下 您需要做的是将 FeatureLabelNameMutatio
  • 如何在 for 循环中安全地从数组中删除项目?

    完全透露 这是一个家庭作业问题 它应该有一个 Circle 类型的私有属性 一系列圆圈 该方法应删除半径大于的任何圆 最小要求 并且小于最大要求 看来我应该使用removeAtIndex 删除不满足循环中确定的条件的数组项 然而 许多人之前
  • Android 使用广播检查互联网连接

    我想实现一个广播接收器来检查互联网连接 如果连接不存在 只需完成 它 但我还是搞乱了上下文 请检查我下面的代码 This broadcast receiver is awoken after boot and registers the s
  • MongoDB 中的多对多更新无需事务

    我有两个具有多对多关系的集合 我想在两个文档中存储链接的 ObjectId 数组 以便我可以获取文档 A 并快速检索所有链接的文档 B 反之亦然 创建此链接分为两个步骤 将文档 A 的 ObjectId 添加到文档 B 将文档 B 的 Ob
  • 如何使用生物指纹识别器开发指纹数据库

    我购买了一个简单的生物识别指纹读取器 通常用于通过 USB 连接确保笔记本电脑的安全 它只是被称为生物指纹识别器 而不是品牌 它附带了为笔记本电脑创建安全性的软件 而且效果很好 然而 我对此有不同的想法 我打算创建一个用户指纹数据库 以便我
  • HTTP 错误 500.22 - 内部服务器错误(已检测到不适用于集成托管管道模式的 ASP.NET 设置。)

    当我查看应用程序时 我收到此错误 HTTP 错误 500 22 内部服务器错误 已检测到不适用于集成托管管道模式的 ASP NET 设置 安装了 Net Framework 2 0 3 5和4 并且我使用的是SQL 2008 谁能告诉我这个
  • MVP 和 GWT 小部件之间的通信

    如果我将 MVP 模式与 GWT 结合使用 如 2009 年 Google I O 中的 GWT 架构最佳实践讨论 但已将信息分散到多个小部件中 那么应该如何填充值对象 假设我有一个 EditPersonView Presenter 一个
  • GitLab 在 Debian 上安装失败

    我正在尝试在 Debian 8 5 0 上安装 GitLab 我遵循安装指南 https about gitlab com downloads debian8但最后一步失败了 我在文档中找不到任何信息 gitlab ctl 重新配置完成 R
  • BASH - 读取具有相同“变量”的多个实例的配置文件

    我正在尝试读取配置文件 然后将配置的 部分 放入 bash 脚本中的数组中 然后运行命令 然后再次重复配置 并继续执行此操作 直到配置文件的末尾 这是一个示例配置文件 PORT 5000 USER nobody PATH 1 OPTIONS
  • Flutter 区域设置日期字符串到日期时间

    我想将日期 String 转换为 DateTime 对象 字符串包含土耳其语月份名称 如下所示 我的字符串 来自 API 10 Mart 2021 16 38 我的区域设置 土耳其 tr 我怎样才能转换 感谢您 尝试以下操作 只有 en U
  • 读取 URL 查询参数值 (Vue.js)

    在 vuejs 回调 URL 中 我有一些参数值 我需要读取这个参数值 例如返回url是 http localhost 8080 sucesspage encryteddata abdeshfkkilkalidfel 9a 我努力了this
  • std::vector::insert 的重载解析如何工作

    这是三分之二insert来自 std vector 的方法签名 void insert iterator position size type n const value type val template