c++中函数参数作为引用效率会有差距?

记录一下,今天做leetcode的题

将有序数组转换为二叉搜索树

题目链接将有序数组转换为二叉树

写了一个二分查找的函数,传递了一个vector向量。代码是这样的:

class Solution {
public:
    TreeNode* __sortedArrayToBST(vector<int>nums,int l,int r)
    {
        if(l>r)
            return NULL;
        int mid = (r-l)/2+l;
        TreeNode* node = new TreeNode(nums[mid]);
        node->left = __sortedArrayToBST(nums,l,mid-1);
        node->right = __sortedArrayToBST(nums,mid+1,r);
        return node;
    }
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return  __sortedArrayToBST(nums,0,nums.size()-1);
    }
};

函数

TreeNode* __sortedArrayToBST(vector<int>nums,int l,int r)

nums参数直接进行传递,结果运行效率很低用时500ms

提交后发现,其他人的思路都和我一样,然后开始找不同,发现他们都是将nums引用作为参数

定义成这样

TreeNode* __sortedArrayToBST(vector<int>&nums,int l,int r)

然后,运行用时24ms,这完全不是一个量级

回去好好思考一下,这是为什么

简单看了一下,调用函数的时候都会在栈中开辟内存。

引用是传递的地址,开辟的是地址的内存。而值传递传递nums开辟的是这个向量的内存,远远大于地址的内存。

可能就是这个原因吧!

发布了15 篇原创文章 · 获赞 18 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zhangruijerry/article/details/91126730