Форум программистов, компьютерный форум, киберфорум
Наши страницы

Удаление элемента из вектора ( std::vector<Bullet> ) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ двусвязной список http://www.cyberforum.ru/cpp-beginners/thread929636.html
Привет всем! помогите пожалуйста ! пришлите пожалуйста кто нибудь код реализации связного списка (чтобы был метод вставка и удаление произвольного узла) для изучения...
C++ написать прогу что же это Добавлено через 35 секунд Фух. 50 минут создавал. вот http://www.cyberforum.ru/cpp-beginners/thread929632.html
C++ Подтормаживающий рандом
Сделал простую змейку. #include <iostream> #include <Windows.h> #include <cstdlib> #include <ctime> #include <conio.h> enum napr {up = 2, left, right, down}; napr headN = right; napr hvostN =...
Шаблонные классы. Присвоение к указателю и приведение типов C++
Добрый вечер, ув. форум, есть к вам вопрос. Есть род. абстрактный класс: ParentAbstact Есть два наследника: ChildOne : public ParentAbstact и ChildTwo : public ParentAbstact Есть шаблонный класс:...
C++ dll http://www.cyberforum.ru/cpp-beginners/thread929606.html
1. Можно ли использовать DLL, созданную на одном языке программирования в программе на другом языке? 2. Я так понял, DLL работает только под Windows. Есть ли возможность сделать библиотеку функций,...
C++ Шаблоны и параметр по умолчанию Добрый день. Вроде всё делаю по учебнику, но компилятор не пропускает: #include <iostream> #include <vector> #include <cstdlib> template<class T> bool DefaultComparand(const T &, const T &); ... подробнее

Показать сообщение отдельно
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
27.07.2013, 20:38
Цитата Сообщение от NanoBreaker Посмотреть сообщение
for(auto iter = bullets.begin(); iter != bullets.end(); iter++) { if( iter -> x > 250 || iter -> x < -250 || iter -> y > 250 || iter -> y < -250 ){ bullets.erase(iter); }else{ iter -> moveBullet(); } }
C++
1
2
3
4
5
6
7
8
for (auto iter = bullets.begin(); iter != bullets.end(); ) {
   if (/* ... */) {
      iter = bullets.erase(iter);
   } else {
      iter->moveBullet();
      ++iter;
   }
}
Добавлено через 56 секунд
Просто после erase(iter) iter становиться невалидным.

Добавлено через 3 минуты
вообще как то так
C++
1
2
3
4
5
6
bullets.erase(
      std::remove_if(std::begin(bullets), std::end(bullets), [] (Bullet const& bullet) {
            return (bullet.x > 250 || bullet.x < -250 || bullet.y > 250 || bullet.y < -250);
      })
    , std::end(bullets));
std::for_each(std::begin(bullets), std::end(bullets), std::mem_fn(&Bullet::moveBullet));
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.