如何在函数中直接使用向量作为参数?

How to directly use vector as parameter in a function?

我知道如何在使用前初始化一个新的向量,但如何方便地将它用作函数中的参数? 比如我初始化v1的时候,最后能得到结果,但是当我使用v2的时候,就报错:cannot use this type name.

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
class Solution {
    public:
    vector<int> Add(vector<int>&nums, int target)
    {       
        cout << nums[0] + target;
    }
};

int main(){
    Solution Sol1;
    vector <int> v1 {1,2,3};
    Sol1.add(v1, 8);
    Sol1.add(vector <int> v2{4,5,6}, 8);
}

此外,我尝试将 v2 更正为 Sol1.add(vector <int> {4,5,6}, 8); 但是,它显示错误:非常量引用的初始值必须是左值

这是其中一种方式。 但是这样你就不能使用变量 v2

Sol1.add({4,5,6}, 8);

有关详细信息,请阅读此 Question

您遇到的问题与vector无关。

Sol1.add(vector<int> v2{4,5,6}, 8);

在这里,您似乎正试图在此表达式的中间声明一个对象名称 v2,这在 C++ 中是做不到的。

但是,您可以在其中创建一个未命名的临时对象,例如:

Sol1.add(vector<int>{4,5,6}, 8);

甚至:

Sol1.add({4,5,6}, 8);

但是现在你会面临一个不同的问题,就像你提到的:

The initial value of a non-constant reference must be an left value

原因是您不能创建对临时对象的引用。要解决它,您可以通过更改 add 函数的签名将 vector 复制到您的函数中:

vector<int> add(vector<int> nums, int target)
{
  ⋮
}

但是,此解决方案需要将整个 vector 复制到函数中,因此如果您的 vector 很大,它可能会很慢。另一种方法是将签名更改为 vector 的 const 引用,它可以绑定到临时对象。缺点是你将无法修改函数内的对象,如果你想这样做的话:

vector<int> add(const vector<int>& nums, int target)
{
  ⋮
}