Изменение данных с помощью оператора C ++ 11 `for` - PullRequest
0 голосов
/ 18 мая 2018

Позвольте мне объяснить вам, я работаю над механизмом рендеринга с библиотекой SFML
Что я сделал, я создал объект Game с sf::RenderWindow *window, который показывает все:

void Game::renderize() {
    for (auto it : all_sprites) {
        window->clear(background);
        window->draw(it->getSprite());
    }
}

Я понимаю, что этот новый for копирует данные каждого объекта в контейнере (в данном случае all_sprites равен std::list) до тех пор, пока он не закончится, дело в том, что когда я пытаюсь удалить объект ... вв режиме реального времени ... с erase методом ... он дает сбой и память сбрасывается ... мой учитель только что сказал мне ... "просто переместите координаты спрайта в место, где вы его не увидите"., поэтому я сделал эту функцию:

void Game::rmvObj(sf::String currence) {
    for (auto it : all_sprites) {
        if (it->getName() == currence) it->kill();
    }
}

Дело в том ... этот метод не работает ... и я понимаю, почему ... новый for просто копирует данные в интегратор... так что это не то же самое, что:

void Game::rmvObj(sf::String currence) {
    for (std::list<Object2D*>::iterator it = all_sprites.begin(); it != all_sprites.end(); ++it) {
        if ((*it)->getName() == currence) (*it)->kill();
    }
}

, который указывает на объект real в списке, а не на копию ... Я ненавижу большие выражения в for так ...

Как я могу напрямую изменять объекты в списке, используя новый C ++ 11 for

...