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 に答える