mardi 8 septembre 2020

Avoiding extra copies when returning std::vector from several functions (RVO)

I wonder if there is any way to avoid extra copies when returning std::vector's by a function and "creating" their values directly in vector "integers". The most usual way of doing so before c++11 was passing main std::vector by reference (&) and use it within the filling functions, but I would like to avoid that approach and try something more modern c++ way.

#include <vector>

std::vector<int> function1()
{
    std::vector<int> v;
    v.emplace_back(1);
    v.emplace_back(2);
    v.emplace_back(3);
    
    return v;
}

std::vector<int> function2()
{
    std::vector<int> v;
    v.emplace_back(10);
    v.emplace_back(11);
    
    return v;
}

int main()
{
    std::vector<int> integers;
    
    const auto v1 = function1();
    std::copy(v1.begin(), v1.end(), std::back_inserter(integers));
    
    const auto v2 = function2();
    std::copy(v2.begin(), v2.end(), std::back_inserter(integers));
    
    return 0;
}

What I want is to create directly the elements in the vector defined in main, if possible using c++11 or above features.

Thanks in advance.

Aucun commentaire:

Enregistrer un commentaire