C++ "move from" container

c++, c++11, containers, rvalue-reference

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)

Problem

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

Original source