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

Не может удалить элемент из вектора - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить класс для рациональных чисел http://www.cyberforum.ru/cpp-beginners/thread664491.html
Начало изучения понятия класса и объекта в С++, для меня много не ясного. Помогите, пожалуйста. Задача: необходимо Определить класс (Rational) для рациональных чисел. Рациональное число - число...
C++ не проходит инцилизация вектора #include <iostream> #include <vector> #include <ctime> // function RandomInitializationVector void PrintElementVector(std::vector <int> vector); void RandomInitializationVector(std::vector... http://www.cyberforum.ru/cpp-beginners/thread664480.html
C++ Программа, которая помогает найти число х между 0 и 1000
Программа, которая помогает найти число х между 0 и 1000. Это число х выбирается программой. Использовать функцию rand. Когда вводишь число, программа должна сказать "слишком большое" или "слишком...
Вектор C++
Заполните вектор случайными числами. Напишите вывод на экран. Отсортируйте вектор. Напишите функцию, которая удалит из вектора все простые числа. Напишите функцию, которая копирует все простые...
C++ Вычислить значение функции http://www.cyberforum.ru/cpp-beginners/thread664425.html
Ребят помогите написать код двух задач. Задача 1 Роздилите абитуриентов, что выдержали конкурс, между двумя группами с ближайшим количественным составом. Задача 2 Заданно значение функции...
C++ Как правильно обьявить геометрические точки? Здраствуйте! Задача стоит такая : Добавить геометрическую точку с указанными координатами. (х у) Отсортировать геометрические точки в сторону увеличения расстояния от начала координат. Теперь... подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
06.10.2012, 10:37
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
for (i = 0; i < limit; ++i)
* {
* * *if(Resheto_Atkina(vec[i]))
* * *{
* * * * vec.erase(vec.begin() + i);
* * *}
* }
- сама концепция удалять от начала неверна итак поясняю скажем есть вектор со значениями
1 5 16 23 11 т.е 5-ть значений
Так вот скажем
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
if(Resheto_Atkina(vec[i]))
должны удалить сначала 3-й элемент а затем 5й, что ж смотрим отработку
Удаление 3-го элемента
было
1 5 16 23 11
vec.erase(vec.begin() + 2); стало 1 5 23 11 и хотим удалить 5-й элемент, ха а сколько элементов сейчас в векторе, м?
Тут два варианта решения - 1-й удалять от конца, 2-й при удалении не забывать уменьшать счётчик, т.к. в векторе значений стало на 1 меньше, да и в условии окончания изменить с
C++
1
for (i = 0; i < limit; ++i)
на
for (i = 0; i < vec.size(); ++i)
т.к. размер вектора динамически меняется!Вобщем вот вариант возможного решения
f
or (i = 0; i < vec.size(); i++)//Проверять по факт-му размеру вектора!
{
if(Resheto_Atkina(vec[i]))
{
vec.erase(vec.begin() + i);
i--;//Очень важный момент
}
}

Не по теме:

От себя : не рекомендую использовать префиксные инк/дек

0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru