C++ & 不同用法

标签 c++

关于 & 用法的一些事情让我感到困惑 它有

vector<int> nums
vector<int>& nums
vector<int> &nums

我不确定它们之间的区别。

class Solution {
public:
    int maxArea(vector<int>& height) {
        long i = 0;
        int j = (height.size() - 1);
        long water = 0;
        while (i < j) {
            water = max(water, ((j - i) * min(height[i], height[j])));
            if (height[i] < height[j]) {
                i += 1;
            } else {
                j -= 1;
            }
        }
        return water;
    }
};

上面的答案在LeetCode中无论有没有&都通过了,为什么我们需要关心&

最佳答案

vector<int> nums
//The below two are identical:
vector<int>& nums
vector<int> &nums

如果包含或排除 &,则代码将起作用,但带有 & 的参数接受对函数的同一变量的引用,并防止从调用函数到被调用函数。这是为了提高性能并防止复制开销。引用几乎与指针的工作方式相同。

如果您将其用作变量而不是函数参数,则必须对其进行赋值,并且一旦赋值,就无法将引用更改为引用另一个变量。

这意味着如果您修改函数中的height vector ,调用函数中的 vector 也会被修改。要防止修改,请使用:

int maxArea(const vector<int>& height) 

关于C++ & 不同用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67617657/

相关文章:

c++ - 什么是 Regal OpenGL?

c++ - gcc 在这里做什么来让每个线程运行一次这段代码?

c++ - 处理数据包的设计模式

c++ - 未知容器、 vector 或数组的大小 c++

c++ - 非类类型的错误 : request for member '..' in '..' ,

c++ - 重复创建和删除同一目录时拒绝访问

c++ - static_cast 和 dynamic_cast 在特定场景中的不同行为

c# - SQL Server 2016 CLR 存储过程错误 : "A system assertion check has failed"

c++ - 运营商>>错误: no matching function for call to

c++ - 在 C++ 中将我的类分离到不同的头文件中