【vector<int> arr 还是vector<int> arr 】关于空间的内存问题

news/2025/2/24 12:56:50

两种写法分别是:

  1. int binarySearch(const std::vector<int>& arr, int target)
  2. int binary_search(const vector<int> data_set, int value)

这两种写法的主要区别在于参数传递的方式:引用传递值传递。下面详细解释为什么推荐使用第一种写法(引用传递)。


1. 引用传递 (const std::vector<int>& arr)

  • const:表示传入的数组是只读的,函数内部不能修改数组的内容。
  • &:表示通过引用传递数组,而不是拷贝整个数组。
  • 优点
    • 避免拷贝开销:如果数组很大,值传递会导致整个数组被拷贝,消耗额外的时间和内存。引用传递则直接使用原始数组,没有拷贝开销。
    • 提高性能:引用传递避免了不必要的内存分配和数据复制,特别适合处理大型数据结构
    • 保持数据不变const 保证了函数内部不会修改数组的内容,增强了代码的安全性和可读性。

2. 值传递 (const vector<int> data_set)

  • const:表示传入的数组是只读的,函数内部不能修改数组的内容。
  • 值传递:会将整个数组拷贝一份,传递给函数。
  • 缺点
    • 拷贝开销大:如果数组很大,拷贝整个数组会消耗额外的时间和内存。
    • 性能低下:对于大型数据结构,值传递会导致性能问题。

为什么推荐使用引用传递?

  1. 性能优化

    • 引用传递避免了不必要的拷贝操作,特别适合处理大型数据结构(如数组、向量等)。
    • 值传递在数组较大时会导致明显的性能下降。
  2. 代码清晰

    • 使用 const 明确表示函数不会修改传入的数组,增强了代码的可读性和安全性。
  3. 通用性

    • 引用传递是 C++ 中处理大型数据结构的推荐方式,符合 C++ 的最佳实践。

代码对比:

引用传递:
int binarySearch(const std::vector<int>& arr, int target) {
    // 直接使用原始数组,没有拷贝开销
    // ...
}
值传递:
int binary_search(const vector<int> data_set, int value) {
    // 每次调用都会拷贝整个数组,开销大
    // ...
}

总结:

  • 引用传递 (const std::vector<int>& arr) 是更高效、更推荐的方式,特别是在处理大型数据结构时。
  • 值传递 (const vector<int> data_set) 会导致不必要的拷贝开销,性能较差,应尽量避免。

因此,推荐使用第一种写法:int binarySearch(const std::vector<int>& arr, int target)


http://www.niftyadmin.cn/n/5864341.html

相关文章

多源BFS(典型算法思想)—— OJ例题算法解析思路

目录 一、542. 01 矩阵 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 代码逻辑思路 数据结构初始化 步骤一&#xff1a;队列初始化 步骤二&#xff1a;广度优先搜索 返回结果 关键点总结 广度优先搜索&#xff08;BFS&#xff09; 访问标记 复杂度…

W803|联盛德|WM IoT SDK2.X测试|(1)开箱:开发板及说明

前几天关注的联盛德微电子新推出了WM IoT SDK2.X&#xff0c;正式发布后&#xff0c;邀请用户参加“免费试用&#xff0c;赢千元大礼”活动&#xff0c;填写信息&#xff0c;等待统一发送&#xff0c;很快收到了板子。 活动地址&#xff1a;联盛德微电子WM IoT SDK2.X正式发布…

java实现二维码图片生成和编解码

java实现二维码图片生成和编解码 在wutool中&#xff0c;封装了二维码工具类&#xff0c;基于google的zxing库&#xff0c;实现二维码图片生成、编码和解码。 关于wutool wutool是一个java代码片段收集库&#xff0c;针对特定场景提供轻量解决方案&#xff0c;只要按需选择代…

React Native 0.76正式版发布,带来多项目更新

去年10月, React Native 0.76版本更新,主要更新的内容有默认启用了新架构,并引入了 React Native DevTools。这是我们团队 6 年辛勤工作的高潮,同时得到了我们令人难以置信的开发者社区的支持。主要更新的内容如下: React Native 新架构默认启用 React Native DevTools 更…

Python 数据分析概述 ①

一文读懂Python数据分析&#xff1a;从基础到实践全攻略 在当今数字化浪潮中&#xff0c;数据分析已然成为解锁海量数据价值的关键钥匙&#xff0c;而Python凭借其独特优势&#xff0c;在数据分析领域大放异彩。今天&#xff0c;咱们就结合教学PPT内容&#xff0c;深入探索Pyt…

10. 九转金丹炼矩阵 - 矩阵置零(标记优化)

哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的金丹谷,谷中有一座巨大的九转金丹炉,炉身闪烁着神秘的光芒。金丹炉的入口处有一块巨大的石碑,上面刻着一行文字:“欲破此炉,需以九转金丹之力,炼矩阵之零,标记优化定乾坤。” 哪吒定睛一看,石碑上还有…

QT中经常出现的用法:组合

在 C 中&#xff0c;一个类包含另一个类的对象称为组合&#xff08; Composition &#xff09;。这是一种常见的设计模式&#xff0c;用 于表示一个类是由另一个类的对象组成的。这种关系通常表示一种 " 拥有 " &#xff08; "has-a" &#xff09;的关系。…

STM32——HAL库开发笔记22(定时器3—呼吸灯实验)(参考来源:b站铁头山羊)

本文利用前几节所学知识来实现一个呼吸灯实验&#xff1a;两颗led灯交替呼吸。 一、STM32CubeMX配置 step1&#xff1a;配置调试接口 step2&#xff1a;配置定时器 定时器1位于APB2总线上&#xff0c;如上图所示。 step3&#xff1a;配置时基单元 按照下图配置 时钟来源配置…