将对象从一个Boost ptr_container移动到另一个

时间:2010-03-02 06:28:17

标签: c++ boost ptr-vector

我想将某个元素从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 个答案:

答案 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)。

然后你可以使用标准的矢量函数。