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

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

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

举个例子体会一下: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

posted @ 2023-12-04 20:30  dctwan  阅读(22)  评论(0编辑  收藏  举报