remove_ifで一気に消す
ベクタの要素を消すときにremove_ifで一致するものを消したくなります。
そんな時は関数オブジェクトを用意して、remove_ifを呼んで消すと便利です。
class Hoge { private: int life_; public: Hoge(int life) : life_(life) { } int GetLife( void ) const { return life_; } }; class HogeDeleter { public: bool operator()(const Hoge& h) { return h.GetLife()==0; } }; BOOST_AUTO_TEST_CASE( vectortest1 ) { using namespace boost::assign; std::vector<Hoge> v; v += Hoge(1),Hoge(0),Hoge(0),Hoge(3); std::vector<Hoge>::iterator e = std::remove_if(v.begin(), v.end(), HogeDeleter() ); v.erase(e,v.end()); foreach( Hoge& h , v ) { cout << h.GetLife() << endl; } BOOST_CHECK_EQUAL( v.size() , 2 ); }