2010-03-02 76 views
4

欲某些元件从一个移动到B:移动对象到另一个

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

上面的代码不编译,因为释放函数返回boost::ptr_container_detail::static_move_ptr<...>,这不适合于推回。

我该如何继续?

编辑:我发现返回的对象有 .get() .release()提供了一个原始指针(这也可能导致一些异常安全问题)。但我宁愿不依赖无证内部功能,所以随时可以分享任何更好的解决方案...

回答

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); 
+0

谢谢,这解决了这个问题。 :) – Tronic 2010-03-02 07:38:29

0

个人而言,我更喜欢使用boost :: shared_ptr的std :: vector <>(即std: :vector> a,b)。

然后你可以使用标准的vectorfunctions。

+0

该方法更简单,可以说更健壮,但如果需要处理数十万个对象,则指针容器效率更高。 – timday 2010-03-02 13:29:31

相关问题