文章目录

  • 零、前言
  • 一、在C++中,往vector插入1000个数字,怎么做能保证性能最高
  • 二、在vector中对10000个数字删除偶数位置的数,怎么做保证性能较高
  • 三、malloc用delete会出现什么问题
  • 四、weak_ptr解决的是什么问题,lock返回的对象可以直接使用吗
  • 五、C++中的左值引用和右值引用是什么? 如果不写移动构造函数,那调用的会是什么?
  • 六、移动构造函数实例
  • 七、std::move
  • 八、对于map和unordered_map容器怎么分别做到对字母的大小写不敏感

零、前言

今天在朋友圈看到别人发的一套C++面经,特意思考了一下

一、在C++中,往vector插入1000个数字,怎么做能保证性能最高

以下是一些可以提高在C++中向vector中插入大量数字性能的技巧:

  1. 预先分配内存空间:使用vector::reserve函数预先分配足够的内存空间,以避免在插入元素时进行重新分配内存的开销。例如,如果你需要插入1000个数字,可以使用vector::reserve(1000)在插入前先为向量分配1000个元素的空间。
  2. 使用移动语义:使用std::move将元素插入vector,而不是使用拷贝构造函数。因为拷贝构造函数会导致新的内存分配和数据复制,而使用移动语义可以避免这些开销。例如,可以使用以下代码向vector中插入一个元素:
vector<int> v;
int x = 123;
v.push_back(std::move(x));
  1. 批量插入元素: 使用std::vector::insert函数批量插入元素,而不是使用单个插入函数。因为单个插入函数可能会多次进行内存分配和内存复制,而批量插入函数可以减少这些开销:
vector<int> v;
vector<int> data(1000);
v.insert(v.end(),data.begin(),data.end());
  1. 使用移动迭代器: 使用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中删除偶数位置的数字的性能的技巧:

  1. 使用erase-remove惯用法:使用erase-remove惯用法从vector中删除偶数位置的数字。该惯用法的思想是先使用std::remove_if算法将所有需要删除的元素移动到vector的末尾,然后再使用std::vector::erase函数删除这些元素。例如,可以使用以下代码从vector中删除偶数位置的数字:
std::vector<

2023最新C++面经(一):vector内存预分配,左值引用和右值引用,move语义相关推荐

  1. 2023最新车道线综述!近五年文章全面盘点(几何建模/机器学习/深度学习)

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[车道线检测]技术交流群 后台回复[车道线综述]获取基于检测.分割.分类.曲线拟合等近几 ...

  2. 会声会影2023最新中文旗舰版新功能介绍

    会声会影Corel VideoStudio2023一款功能丰富的视频编辑软件.具有拖放式标题.转场.覆叠和滤镜,色彩分级.动态分屏视频和新增强的遮罩创建器,超越基本编辑,实现影院级效果.优化分屏剪辑功 ...

  3. 2023最新广西大学计算机电子信息考研复试之计算机网络和软件工程 828数据结构与程序设计上岸冲刺复试宝典(复试版/复试资料)

    2023最新广西大学计算机电子信息考研复试之计算机网络和软件工程 828数据结构与程序设计上岸冲刺复试宝典(复试版/复试资料) 适用专业:计算机科学与技术(学硕) 计算机技术(专硕).人工智能(专硕) ...

  4. 【2023最新】Kotlin基础教程 Kotlin Basics 2 第二阶段:Sold! 2.4 【信息单位】Units of information

    [2023最新]Kotlin基础教程 Kotlin Basics 文章目录 [2023最新]Kotlin基础教程 Kotlin Basics 2 第二阶段:Sold! 2.4 [信息单位]Units ...

  5. 2023最新java学习教程(学习路线+课程大纲+视频教程+面试题+学习工具)

    2023最新java学习教程汇总(学习路线+课程大纲+视频教程+面试题+学习工具) 目录 一.首先要了解什么是JAVA? 二.Java发展及就业前景分析 三.Java学习路线图 四.Java课程大纲 ...

  6. c++ vector查找_C++ vector内存分配策略浅析

    (给CPP开发者加星标,提升C/C++技能) 来源:邱国禄https://blog.csdn.net/qiuguolu1108/article/details/107146184 vector是一个封 ...

  7. C++ vector 内存分配与回收机制

    原文出处:http://blog.csdn.net/qq_30835655/article/details/60762196 最近开始更加深入的学习C++,发现了很多以前没注意到但是很重要的知识点.这 ...

  8. vector内存分配和回收机制

    随着对C++的深入学习,逐渐发现了一些很重要的知识点.本文重点讲解C++ Vector内存机制和效率问题. iOS移动端 记得之前做iOS移动端时,关于垃圾回收机制是这样说的: ARC的基本概念:   ...

  9. 2023最新自助下单彩虹云商城系统源码+免授权无后

    正文: 2023最新自助下单彩虹云商城系统免授权无后源码. 安装教程:源码上传到根目录解压,然后访问域名按照提示进行安装即可. 程序: wwxhes.lanzouf.com/i0nSC0knj0ib ...

最新文章

  1. 贝叶斯厉害在哪里,相当牛的文章
  2. 国内与国外摄影爱好者的区别
  3. Mysql取上一条,下一条
  4. C语言中数组越界访问造成死循环现象
  5. Python测试开发django2.环境部署项目创建
  6. 团队作业(二):项目选题
  7. 继承的作用是什么?看看下面这些例子吧!
  8. hdu-2112 HDU Today(最短路)
  9. (day 39 - 动态规划) 剑指 Offer 47. 礼物的最大价值
  10. win10 动态磁盘 linux,大师教你win10系统提示动态磁盘无效的详尽处理办法
  11. 【汉化】nitrosdk。。。这个。。。天朝V5
  12. const char* std::string CString 之间的转换
  13. win10 计算机菜单,win10系统计算机界面菜单栏不见了的还原方案
  14. 浏览器渲染流水线解析与网页动画性能优化
  15. 生产环境突然编译报错:‘XXXX‘ is not defined no-undef
  16. 几何分布的期望与方差
  17. 中文分词-转载3_一个北京程序员
  18. 微信朋友圈装x代码_朋友圈生成器有哪些_微信朋友圈生成器大全_微信朋友圈装逼生成器下载_飞翔软件专题...
  19. 查看并修改Linux主机名命令hostname
  20. ArrayList.toArray(T[] a) 的说明

热门文章

  1. ES6 Promise的理解
  2. 电动车无刷电机的工作原理
  3. UE4 SaveGame保存游戏注意事项
  4. 【论文阅读】investigation of different skeleton features for cnn-based 3D action recognition
  5. 达梦-主备与读写分离集群
  6. 质数的后代 --水题
  7. 魅族mx系统服务器,魅族MX答疑:魅族MX Flyme云功能测试
  8. 漏洞复现 | CVE-2018-1273 Spring Data Commons 远程命令执行
  9. 读书笔记:《代码大全第2版》 06.创建高质量的代码之伪代码编程
  10. 匿名飞控TI版_PID部分,串级PID,微分先行,前馈控制