C++ 将对象从一个Boost ptr_容器移动到另一个容器

C++ 将对象从一个Boost ptr_容器移动到另一个容器,c++,boost,ptr-vector,C++,Boost,Ptr Vector,我想将某些元素从a移到b: boost::ptr_vector<Foo> a, b; // ... b.push_back(a.release(a.begin() + i))); boost::ptr_向量a,b; // ... b、 向后推(a.释放(a.开始()+i)); 上面的代码没有编译,因为release函数返回boost::ptr\u container\u detail::static\u move\u ptr,不适合推回 我应该如何进行 编辑:我发现返回的对象具有

我想将某些元素从a移到b:

boost::ptr_vector<Foo> a, b;
// ...
b.push_back(a.release(a.begin() + i)));
boost::ptr_向量a,b;
// ...
b、 向后推(a.释放(a.开始()+i));
上面的代码没有编译,因为release函数返回
boost::ptr\u container\u detail::static\u move\u ptr
,不适合推回

我应该如何进行


编辑:我发现返回的对象具有提供原始指针的.get()
.release()
(这也可能导致一些异常安全问题)。然而,我更喜欢不依赖未记录的内部功能,所以可以随意分享任何更好的解决方案。

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

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

boost::ptr_矢量a、b;
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 );
//将一个元素a[i]转移到b的末端 b、 传输(b.结束(),a.开始()+i,a); //将N个元素a[i]…a[i+N]转移到b的末尾 b、 传输(b.end(),a.begin()+i,a.begin()+i+N,a);
这种方法更简单,可以说更健壮,但如果需要处理数十万个对象,指针容器的效率要高得多。