当前位置: 首页 > news >正文

【C++】可变模板参数和完美转发

C++中有一个常见的误区,在对pair处理时,有时候需要通过花括号{将pair的元素包裹起来作为参数传递,否则编译器会报错;有时候又可以直接将多个元素直接作为参数传递,编译器不会报错,例如priority_queue的emplace方法。

emplace

这个方法的作用是在priority_queue堆中插入一个元素,如果我定义的堆如下:

priority_queue<pair<int, int>>q;

那么使用emplace的情况可能就像这样:

q.emplace(nums[i], i);

那么stl内部是如何实现的呢?

STL的实现

void emplace(Args&&... args);

这段代码表示了STL内部的实现,主要奥秘在参数部分:
在这里插入图片描述
首先是利用了模板参数包Args,也就是说这个类不是用户自定义的而是已经封装好的,然后通过…就实现了多个参数的接收,这种手段比tuple更灵活,主要体现在:
在这里插入图片描述
而完美转发的存在又使得对其插入的过程中存在的拷贝占用的时间和空间大大减小,进一步提升了stl使用起来的效率。

相关文章:

  • 蓝桥杯 之 图形规律
  • rollup是什么?以及它和webpack 和vite的区别
  • 【Web安全方向编程语言学习顺序推荐】
  • 基于 Vue 和 SSM 的前后端分离项目实战:登录与注册功能实现
  • 安卓基础组件Looper - 01 通讯机制简介
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.1.3时间序列数据优化(Rollover + ILM策略)
  • Leetcode 30. 串联所有单词的子串
  • 小鹏汽车申请注册“P7 Ultra”商标 或为P7车型升级版铺路
  • [java基础知识] java的集合体系Collection(List,Set,Queue),Map
  • 基于python跨平台硬件诊断的工具
  • 刷题 | 牛客 - js入门15题(更ing)5/15知识点解答
  • ubuntu 启动不起来,光标闪烁 解决方法
  • 杰和科技工业整机AF208|防尘+静音+全天候运行
  • GPU/CUDA 发展编年史:从 3D 渲染到 AI 大模型时代
  • 谈谈 HTTPS 的工作原理,SSL / TLS 握手流程是什么?
  • RabbitMQ怎么实现延时支付?
  • C++:内联函数
  • Linux常用指令
  • VirtualBox虚拟机安装Mac OS启动后的系统设置
  • 指纹细节提取(Matlab实现)
  • 内蒙古公开宣判144件毁林毁草刑案,单起非法占用林地逾250亩
  • 结婚这件事,年轻人到底怎么想的?
  • 胸外科专家查出肺多发结节,说了一个可怕的事实……
  • 中国人保不再设监事会,国寿集团未再设置监事长职务
  • 东风着陆场近日气象条件满足神舟十九号安全返回要求
  • 中国防疫队深入缅甸安置点开展灾后卫生防疫工作