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 ...
最新文章
- 贝叶斯厉害在哪里,相当牛的文章
- 国内与国外摄影爱好者的区别
- Mysql取上一条,下一条
- C语言中数组越界访问造成死循环现象
- Python测试开发django2.环境部署项目创建
- 团队作业(二):项目选题
- 继承的作用是什么?看看下面这些例子吧!
- hdu-2112 HDU Today(最短路)
- (day 39 - 动态规划) 剑指 Offer 47. 礼物的最大价值
- win10 动态磁盘 linux,大师教你win10系统提示动态磁盘无效的详尽处理办法
- 【汉化】nitrosdk。。。这个。。。天朝V5
- const char* std::string CString 之间的转换
- win10 计算机菜单,win10系统计算机界面菜单栏不见了的还原方案
- 浏览器渲染流水线解析与网页动画性能优化
- 生产环境突然编译报错:‘XXXX‘ is not defined no-undef
- 几何分布的期望与方差
- 中文分词-转载3_一个北京程序员
- 微信朋友圈装x代码_朋友圈生成器有哪些_微信朋友圈生成器大全_微信朋友圈装逼生成器下载_飞翔软件专题...
- 查看并修改Linux主机名命令hostname
- ArrayList.toArray(T[] a) 的说明
热门文章
- ES6 Promise的理解
- 电动车无刷电机的工作原理
- UE4 SaveGame保存游戏注意事项
- 【论文阅读】investigation of different skeleton features for cnn-based 3D action recognition
- 达梦-主备与读写分离集群
- 质数的后代 --水题
- 魅族mx系统服务器,魅族MX答疑:魅族MX Flyme云功能测试
- 漏洞复现 | CVE-2018-1273 Spring Data Commons 远程命令执行
- 读书笔记:《代码大全第2版》 06.创建高质量的代码之伪代码编程
- 匿名飞控TI版_PID部分,串级PID,微分先行,前馈控制