質問: TestList.begin(); IT != TestList.end(); IT++) { IT->F(); } return 0; } void cEnemy::F() { //画面外に出たら、殺す if (true) { TestList.remove(*this); } } ``` ### 試したこと 「C2678」でグーグル検索 「C++ list 自分 削除」でグーグル検索 ### 補足情報(FW/ツールのバージョンなど) OS:Windows10 コンパイラ:VisualStudio2017 言語:C++
回答: 自殺するオブジェクトが自分が住んでるビルをハードコーディングして部屋ごと爆破するのは なんというか迷惑な気がする。 案1. 死体掃除業者を呼ぶ ``` #include #include class cEnemy { bool alive = true; public: bool isAlive() const; void F(); }; std::list TestList; int main() { TestList.push_back(cEnemy()); TestList.push_back(cEnemy()); TestList.push_back(cEnemy()); for (auto IT = TestList.begin(); IT != TestList.end(); IT++) { IT->F(); // 殺す } std::cout << TestList.size() << std::endl; // お片付け TestList.remove_if(](const cEnemy& e){return !e.isAlive();}); std::cout << TestList.size() << std::endl; return 0; } void cEnemy::F() { //画面外に出たら、殺す if (true) { alive = false; // 死にました } } bool cEnemy::isAlive() const{return alive;} ``` 案2. ビル(list)に管理人を雇ってそいつに命令する。 ``` class cEnemy { bool alive = true; public: bool isAlive() const; bool F(); }; class cEnemyManager { public: std::list TestList; void remove_if_F(); } void cEnemyManager::remove_if_F(){ TestList.remove_if( [{return e.F();} ); } bool cEnemy::F() { //画面外に出たら、殺す if (true) { alive = false; // 死にました return true; } return false; } ```