dolgom
dolgom

Reputation: 631

How can I return vector by reference in C++

I want to make the function that returns a vector by reference. But the returned vector(returned_v) is not same as vec.v, but a copied vector. It means the vector is returned by value. How can I get the referenced vector from vector_reference()?

class Vec {
  public:
    std::vector<int> v = {1, 2, 3};
    std::vector<int>& vector_reference() {
        return v;
    }
};

int main() {
    Vec vec;
    std::vector<int> returned_v = vec.vector_reference();
    returned_v.clear();
    std::cout << returned_v.size() << std::endl; // result: 0
    std::cout << vec.v.size() << std::endl; // result: 3

    return 0;
}

Upvotes: 1

Views: 1743

Answers (2)

alexzhu
alexzhu

Reputation: 11

The reference in the function vector_reference() is the reference of vec.v. However, returned_v is a copy of vec.v, not a referrence of it. Two ways can help you:

  1. std::vector<int>& returned_v = vec.vector_reference();

  2. std::vector<int> returned_v = std::move(vec.vector_reference()); //C++ 11

Upvotes: 0

songyuanyao
songyuanyao

Reputation: 172924

returned_v is an independent object which gets copied from the return value of vec.vector_reference(). You should declare it as reference too.

std::vector<int>& returned_v = vec.vector_reference();

Upvotes: 6

Related Questions