Перемещение объектов из одного Boost ptr_container в другой - PullRequest
4 голосов
/ 02 марта 2010

Я хочу переместить определенный элемент из a в b:

boost::ptr_vector<Foo> a, b;
// ...
b.push_back(a.release(a.begin() + i)));

Приведенный выше код не компилируется, поскольку функция release возвращает boost::ptr_container_detail::static_move_ptr<...>, что не подходит для возврата назад.

Как мне поступить?

РЕДАКТИРОВАТЬ: я обнаружил, что возвращенный объект имеет .get () .release(), который предоставляет необработанный указатель (который также может привести к некоторым проблемам безопасности исключений). Однако я предпочел бы не полагаться на недокументированные внутренние функции, поэтому не стесняйтесь делиться лучшими решениями ...

Ответы [ 2 ]

4 голосов
/ 02 марта 2010
boost::ptr_vector<Foo> a, b;

// transfer one element a[i] to the end of b
b.transfer( b.end(), a.begin() + i, a ); 
// transfer N elements a[i]..a[i+N] to the end of b
b.transfer( b.end(), a.begin() + i, a.begin() + i + N, a );
0 голосов
/ 02 марта 2010

Лично я предпочитаю использовать std :: vector <> boost :: shared_ptr (т.е. std :: vector> a, b).

Тогда вы можете использовать стандартные функции векторов.

...