我想将某个元素从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()
,它提供了一个原始指针(这也可能导致一些异常安全问题)。但是,我宁愿不依赖于未记录的内部功能,所以请随意分享任何更好的解决方案......
答案 0 :(得分:4)
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 );
答案 1 :(得分:0)
就个人而言,我更喜欢使用std :: vector&lt;&gt; boost :: shared_ptr(即std :: vector&gt; a,b)。
然后你可以使用标准的矢量函数。