如何在函数中直接使用向量作为参数?
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)
{
⋮
}
我知道如何在使用前初始化一个新的向量,但如何方便地将它用作函数中的参数? 比如我初始化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)
{
⋮
}