首页 > 编程语言 >c++传参时 值传递和引用传递的区别

c++传参时 值传递和引用传递的区别

时间:2023-12-04 20:35:28浏览次数:39  
标签:cnt vector end int 传参时 c++ 传递 intervals

值传递需要开辟存储空间并拷贝这个对象,引用传递只是给这个对象起了一个别名,不涉及开辟空间和拷贝操作,引用传递更高效

值传递在调用函数中修改的不是原来的对象,而引用传递在调用函数中就能直接修改原来的对象

举个例子体会一下:435. 无重叠区间

贪心算法求解,涉及到排序操作,排序函数中需要指定按照结束时间排序,就涉及到给排序函数传递参数

值传递,直接超时

int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        int cnt = 0;
        // 按finish time排序
        sort(intervals.begin(), intervals.end(), [](vector<int> a, vector<int> b){
            return a[1] < b[1];
        });

        // 遍历若当前区间和前一个没有重叠 可以留下 否则需要删除
        int last_end = intervals[0][1];
        for(int i = 1; i < intervals.size(); ++i){
            if(intervals[i][0] < last_end){
                cnt++;
            }
            else{
                last_end = intervals[i][1];
            }
        }
        return cnt;
    }

改为引用传递,正确

int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        int cnt = 0;
        // 按finish time排序
        sort(intervals.begin(), intervals.end(), [](vector<int> &a, vector<int> &b){
            return a[1] < b[1];
        });

        // 遍历若当前区间和前一个没有重叠 可以留下 否则需要删除
        int last_end = intervals[0][1];
        for(int i = 1; i < intervals.size(); ++i){
            if(intervals[i][0] < last_end){
                cnt++;
            }
            else{
                last_end = intervals[i][1];
            }
        }
        return cnt;
    }

image-20231204202700672

标签:cnt,vector,end,int,传参时,c++,传递,intervals
From: https://www.cnblogs.com/dctwan/p/17875898.html

相关文章

  • C/C++ 原生套接字抓取FTP数据包
    网络通信在今天的信息时代中扮演着至关重要的角色,而对网络数据包进行捕获与分析则是网络管理、网络安全等领域中不可或缺的一项技术。本文将深入介绍基于原始套接字的网络数据包捕获与分析工具,通过实时监控网络流量,实现抓取流量包内的FTP通信数据,并深入了解数据传输的细节,捕捉潜在......
  • C++:如何将 LLVM 嵌套到你的项目中去
    IDE:ClionLLVMcmake_minimum_required(VERSION3.9)project(clang_demo)find_package(LLVMREQUIREDCONFIG)message(STATUS"FoundLLVM${LLVM_PACKAGE_VERSION}")message(STATUS"UsingLLVMConfig.cmakein:${LLVM_DIR}")......
  • C++_线程池代码看C++类-模板-标准库
    C++线程池线程池的组成部分:线程池管理器(ThreadPoolManager):用于创建并管理线程池工作线程(WorkThread):线程池中线程任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。任务队列:用于存放没有处理的任务。提供一种缓冲机制。 通过新......
  • 一. C++基础
    文章参考:《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)_白鳯的博客-CSDN博客1.一个简单的案例#include<iostream>//编译预处理命令usingnamespacestd;//使用命名空间intadd(inta,intb);//函数原型说明intmain()//主函数{ intx,y;......
  • 2021 最佳 C++ IDE 排行
    2021最佳C++IDE排行 BlogAuthor:DoriExtermanPublishedOn:5月31,2021Estimatedreadingtime:1minutes想把所有优秀的 IDE(集成开发环境)或类似 IDE 的工具在一篇文章内梳理出来,比登天还难。不过,JetBrains的调查数据显示,75% 的受访者经常使用 IDE。这些工具推......
  • 最佳 C++ 编译器
    最佳C++编译器Incredibuild​已认证账号​关注 134人赞同了该文章 C++是一个“开放”的编程语言,任何人都可以使用自己喜欢的编译器。当然,C++编译器的种类也很多。同样, C++IDE 也不少,我在之前的一个博客中讨论过这个话题。编译和运行C++......
  • C++ 内联函数 inline
    宏定义实现和普通函数实现:-宏定义是直接在实现的时候进行代码替换,可能产生结果异常问题。-普通函数实现:调用函数进出函数体的时候时间开销可能过大。1#include<iostream>2usingnamespacestd;3//宏实现4#defineGETMAX(a,b)((a)>(b)?(a):(b))......
  • vue3 setup 父组件向子组件传递参数、方法|子组件向父组件传递数据,函数
    https://blog.csdn.net/qq_27517377/article/details/123163381https://blog.csdn.net/qq_27517377/article/details/123166367vue3setup父组件向子组件传递参数参数<template><el-rowclass="mb-4"> <el-buttontype="danger">props.vue传......
  • c++ friend关键字 友元
     在C++中,friend关键字用于声明友元函数或友元类1。友元函数或友元类可以访问当前类的私有成员和保护成员,即使它们不是当前类的成员函数或成员类1。友元函数是一个独立的函数,而友元类是一个类可以访问另一个类的私有成员和保护成员1。例如,如果要声明函数为一个类的友元,需要......
  • C++U5-08-二叉树1
    上节课作业分析讲解视频链接:https://pan.baidu.com/s/1_jaM_TlZmLJX4JbLuJtKzA?pwd=2us4提取码:2us4学习目标  树在C++中,二叉树是一种常用的数据结构,由节点(Node)组成,每个节点可以有最多两个子节点。二叉树具有以下几个主要的作用:存储和组织数据:二叉树可用于存储和组织大......