在以下情况下,如何从列表中删除屏幕?

class ScreenManager {

    list<GameScreen> screens;

    void removeScreen(GameScreen & screen) {
        //screens.remove(screen); // won't work
        //screens.erase( remove( screens.begin(), screens.end(), screen ), screens.end() );  // won't work either
    }
}

最佳答案

std::remove(或您的情况下的std::list::remove)使用比较运算符(operator==)查找/标识应从容器中删除的对象。

由于使用的是用户定义的GameScreen类型,因此需要为您的类提供operator==。因此,在您的类(class)中,您需要实现:

bool operator==( const GameScreen& other ) const  {
    // do whatever you need to determine whether
    // `GameScreen` instance `other` is equal (in value)
    // to `this` instance of `GameScreen`
}

然后,screens.remove( screen);将起作用。

关于c++ - 从std::list中删除对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9933162/

10-10 13:18