2023最新C++面经(一):vector内存预分配,左值引用和右值引用,move语义
文章目录
- 零、前言
- 一、在C++中,往vector插入1000个数字,怎么做能保证性能最高
- 二、在vector中对10000个数字删除偶数位置的数,怎么做保证性能较高
- 三、malloc用delete会出现什么问题
- 四、weak_ptr解决的是什么问题,lock返回的对象可以直接使用吗
- 五、C++中的左值引用和右值引用是什么? 如果不写移动构造函数,那调用的会是什么?
- 六、移动构造函数实例
- 七、std::move
- 八、对于map和unordered_map容器怎么分别做到对字母的大小写不敏感
零、前言
今天在朋友圈看到别人发的一套C++面经,特意思考了一下
一、在C++中,往vector插入1000个数字,怎么做能保证性能最高
以下是一些可以提高在C++中向vector中插入大量数字性能的技巧:
- 预先分配内存空间:使用vector::reserve函数预先分配足够的内存空间,以避免在插入元素时进行重新分配内存的开销。例如,如果你需要插入1000个数字,可以使用vector::reserve(1000)在插入前先为向量分配1000个元素的空间。
- 使用移动语义:使用std::move将元素插入vector,而不是使用拷贝构造函数。因为拷贝构造函数会导致新的内存分配和数据复制,而使用移动语义可以避免这些开销。例如,可以使用以下代码向vector中插入一个元素:
vector<int> v;
int x = 123;
v.push_back(std::move(x));
- 批量插入元素: 使用std::vector::insert函数批量插入元素,而不是使用单个插入函数。因为单个插入函数可能会多次进行内存分配和内存复制,而批量插入函数可以减少这些开销:
vector<int> v;
vector<int> data(1000);
v.insert(v.end(),data.begin(),data.end());
- 使用移动迭代器: 使用std::make_move_iterator将元素转换为移动迭代器以避免拷贝构造函数的开销。
std::vector<std::string> v;
std::string str = "hello";
v.insert(v.end(), std::make_move_iterator(std::begin(str)), std::make_move_iterator(std::end(str)));
二、在vector中对10000个数字删除偶数位置的数,怎么做保证性能较高
以下是一些可以提高在C++中从vector中删除偶数位置的数字的性能的技巧:
- 使用erase-remove惯用法:使用erase-remove惯用法从vector中删除偶数位置的数字。该惯用法的思想是先使用std::remove_if算法将所有需要删除的元素移动到vector的末尾,然后再使用std::vector::erase函数删除这些元素。例如,可以使用以下代码从vector中删除偶数位置的数字:
std::vector<
2023最新C++面经(一):vector内存预分配,左值引用和右值引用,move语义相关推荐
- 2023最新车道线综述!近五年文章全面盘点(几何建模/机器学习/深度学习)
点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[车道线检测]技术交流群 后台回复[车道线综述]获取基于检测.分割.分类.曲线拟合等近几 ...
- 会声会影2023最新中文旗舰版新功能介绍
会声会影Corel VideoStudio2023一款功能丰富的视频编辑软件.具有拖放式标题.转场.覆叠和滤镜,色彩分级.动态分屏视频和新增强的遮罩创建器,超越基本编辑,实现影院级效果.优化分屏剪辑功 ...
- 2023最新广西大学计算机电子信息考研复试之计算机网络和软件工程 828数据结构与程序设计上岸冲刺复试宝典(复试版/复试资料)
2023最新广西大学计算机电子信息考研复试之计算机网络和软件工程 828数据结构与程序设计上岸冲刺复试宝典(复试版/复试资料) 适用专业:计算机科学与技术(学硕) 计算机技术(专硕).人工智能(专硕) ...
- 【2023最新】Kotlin基础教程 Kotlin Basics 2 第二阶段:Sold! 2.4 【信息单位】Units of information
[2023最新]Kotlin基础教程 Kotlin Basics 文章目录 [2023最新]Kotlin基础教程 Kotlin Basics 2 第二阶段:Sold! 2.4 [信息单位]Units ...
- 2023最新java学习教程(学习路线+课程大纲+视频教程+面试题+学习工具)
2023最新java学习教程汇总(学习路线+课程大纲+视频教程+面试题+学习工具) 目录 一.首先要了解什么是JAVA? 二.Java发展及就业前景分析 三.Java学习路线图 四.Java课程大纲 ...
- c++ vector查找_C++ vector内存分配策略浅析
(给CPP开发者加星标,提升C/C++技能) 来源:邱国禄https://blog.csdn.net/qiuguolu1108/article/details/107146184 vector是一个封 ...
- C++ vector 内存分配与回收机制
原文出处:http://blog.csdn.net/qq_30835655/article/details/60762196 最近开始更加深入的学习C++,发现了很多以前没注意到但是很重要的知识点.这 ...
- vector内存分配和回收机制
随着对C++的深入学习,逐渐发现了一些很重要的知识点.本文重点讲解C++ Vector内存机制和效率问题. iOS移动端 记得之前做iOS移动端时,关于垃圾回收机制是这样说的: ARC的基本概念: ...
- 2023最新自助下单彩虹云商城系统源码+免授权无后
正文: 2023最新自助下单彩虹云商城系统免授权无后源码. 安装教程:源码上传到根目录解压,然后访问域名按照提示进行安装即可. 程序: wwxhes.lanzouf.com/i0nSC0knj0ib ...
最新文章
- 如何使用ModelSim作前仿真與後仿真? (真oo无双前辈)
- Head First Python-Python中与文件相关的操作-读、处理、写
- 【模拟】聊天服务器的外部流量
- VMware10出现VMware Workstation 不可恢复错误: (vmx)
- C/C++语言开发环境的搭建
- java基础练习题(含答案)
- cmos和ttl_TTL与CMOS集成电路的区分
- 计算机安装win10配置,安装Win10系统配置的最低要求
- Ubuntu18.04配置运行Kintinuous
- 学习笔记(十四):基于位置无关感知策略的WIFI手势识别
- 用HTML5画布画一个小黄人,Android 用Canvas 画几何图形,画出小黄人
- 从零开始操作系统------探析保护模式
- oracle中的取余函数MOD
- 【Unity开发小技巧】Unity随机概率扩展(概率可调控)
- 公众号如何运营?我的经验总结
- Python高效编程之88条军规(1):编码规范、字节序列与字符串
- 反射望远镜的发展历程(4)
- 可口可乐迎来重大人事变动:全球COO、CFO和CTO都要换人
- Wek9 B - Brand type judgment
- 竞拍价格这个过程——在线拍卖行(2)