4

我想将某些元素从 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(),它提供了一个原始指针(这也可能导致一些异常安全问题)。但是,我宁愿不依赖未记录的内部功能,因此请随时分享任何更好的解决方案......

4

2 回答 2

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 );
于 2010-03-02T07:26:13.687 回答
0

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

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

于 2010-03-02T07:08:04.197 回答