Search code examples
c++c++11containersrvalue-reference

C++ "move from" container


In C++11, we can get an efficiency boost by using std::move when we want to move (destructively copy) values into a container:

SomeExpensiveType x = /* ... */;
vec.push_back(std::move(x));

But I can't find anything going the other way. What I mean is something like this:

SomeExpensiveType x = vec.back(); // copy!
vec.pop_back(); // argh

This is more frequent (the copy-pop) on adapter's like stack. Could something like this exist:

SomeExpensiveType x = vec.move_back(); // move and pop

To avoid a copy? And does this already exist? I couldn't find anything like that in n3000.

I have a feeling I'm missing something painfully obvious (like the needlessness of it), so I am prepared for "ru dum". :3


Solution

  • I might be total wrong here, but isn't what you want just

    SomeExpensiveType x = std::move( vec.back() ); vec.pop_back();
    

    Assuming SomeExpensiveType has a move constructor. (and obviously true for your case)