У меня есть доступ только к C++03, и я часто хочу переместить вектор в функцию так, как это можно сделать в C++11. Вопрос, как это сделать, чтобы не слишком запутать пользователя кода. Итак, мой вопрос в том, как программисты делали это до C++11.
Я знаю, что этот вектор можно «переместить» с помощью функции подкачки. Итак, вот что я придумал:
class Foo
{
public:
Foo(std::vector<int>& vec)
{
using std::swap;
swap(vec, m_vec); // "move" vec into member vector
}
private:
std::vector<int> m_vec;
};
// usage:
std::vector<int> v(100, 1337);
Foo foo(v);
// v.empty() == true
Проблема с этим подходом заключается в том, что пользователю не очевидно, что его вектор будет перемещен в класс Foo. Есть ли передовое решение для такого рода проблем? Заранее спасибо!
Steal_Vector
вместоFoo
. - person pqnet   schedule 26.08.2014Foo::swap_buffer
. - person eerorika   schedule 26.08.2014using std::swap;
вместоstd::swap(...)
По крайней мере, я понимаю, почему люди пишутusing namespace std;
- потому что им лень каждый раз набирать std::. Но здесь он даже больше набирает первое место. - person Slava   schedule 26.08.2014swap
классаvector
. Было бы это плохой идеей? - person pqnet   schedule 26.08.2014