4daJKong
4daJKong

Reputation: 2045

How to directly use vector as parameter in a function?

I know how to initilize a new vector before using it, but how to convenitently use it as paramter in a function? For example, when I init v1, it can get result in the end, but when I use v2, it shows error :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);
}

Besides, I tried to correct v2 as Sol1.add(vector <int> {4,5,6}, 8); However, it shows error: The initial value of a non-constant reference must be an left value

Upvotes: 0

Views: 118

Answers (2)

Arpit Mittal
Arpit Mittal

Reputation: 95

This is one of the ways. But in this way you will not be able use the variable v2

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

For more details read this Question

Upvotes: 1

Ranoiaetep
Ranoiaetep

Reputation: 6637

The problem you are having has nothing to do with vector.

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

Here, it seems like you are trying to declare an object name v2 in the middle of this expression, which isn't something you can do in C++.

However, you can create a unnamed temporary object in the middle of it like:

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

or even:

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

But now you would face a different problem, like you mentioned:

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

The reason for that is you can't create a reference to a temporary object. To solve it, you can either copy the vector to your function, by changing the signature of your add function:

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

However, this solution need to copy the entire vector to the function, hence it might be quite slow if your vector is large. Another way is to change the signature to const reference of a vector, which can bond to a temporary object. The downside is that you will not be able to modify the object inside the function, if you were looking to do that:

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

Upvotes: 1

Related Questions