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

本文探讨了如何在C++中优化向vector插入大量数字的性能,使用预分配内存、移动语义和批量插入。此外,文章讲解了在vector中删除偶数位置数字的高效方法,以及使用erase-remove惯用法。还讨论了malloc与delete混合使用可能导致的问题,以及weak_ptr在解决循环引用问题中的作用。最后,解释了C++中的左值引用、右值引用以及移动构造函数的概念,并提供了移动构造函数的实例。
摘要由CSDN通过智能技术生成


零、前言

今天在朋友圈看到别人发的一套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<int> v{
   ...}; // 假设有10000个数字
v.erase(std::remove_if(v.begin</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值