Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
#1

Пара вопросов по итераторам - C++

09.05.2011, 12:36. Просмотров 641. Ответов 2
Метки нет (Все метки)

1. Почему в этом коде элементы удаляются через одного?
C++
1
2
for (std::vector <int>::iterator j = vector.begin(); j < vector.end(); j++)
                vector.erase(j)
2.Как с помощью итераторов удалить нули с конца(но если весь массив состоит из нулей, то 1 оставить)?
Пробовал по разному, последний вариант:
C++
1
2
while (*(c.end()-1)==0||(c.end()-1)!=c.begin())
        c.pop_back();
Где-то зацикливается.
UPD:
2й вопрос решил так
C++
1
2
while (vector.size() > 1 && vector.back() == 0)
    vector.pop_back();
Но почему не работает предыдущий код все еще загадка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 12:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Пара вопросов по итераторам (C++):

Пара вопросов по C++ 11
1. чем отличаются std::forward_list и std::initializer_list? 2. не получается...

Пара вопросов по С++
возникло несколько вопросов, с которыми что то не могу никак разобраться 1....

пара вопросов по GUI
1) итак, посмотрел Inter PRO одного банка. При наборе в IE адреса он каким-то...

Пара глупых вопросов
Помогите please,please,please. Не могу понять в чем туплю, надо всего-то...

Пара вопросов про массивы
у меня есть пара вопросов,хотя один можно сказать относится к функциям..но тема...

вставление строк и пара вопросов
вычислить и вывести на экран в виде таблицы значение функции F на интервале от...

2
mansp
18 / 18 / 7
Регистрация: 07.11.2010
Сообщений: 136
09.05.2011, 12:58 #2
Цитата Сообщение от diagon Посмотреть сообщение
Почему в этом коде элементы удаляются через одного?
Код C++1
2 for (std::vector <int>::iterator j = vector.begin(); j < vector.end(); j++)
vector.erase(j)
вот так можно
C++
1
 vector.erase (vector.begin(),vector.end())
erase ведь удаляет елемент вектора и сдвигает его грубо говоря ,циклом ты просто удаляеш елемент, затем вектор сдвигаетса, тот элемент корой должен быть после удалённого стает на его место ,дальше выходит ты просто перескакиваеш
1
Ma3a
Эксперт С++
619 / 463 / 57
Регистрация: 28.01.2011
Сообщений: 605
09.05.2011, 13:23 #3
Цитата Сообщение от diagon Посмотреть сообщение
1. Почему в этом коде элементы удаляются через одного?
потому что при каждом erase все итераторы вектора, находящиеся дальше удаленного элемента сдвигаются, а сам erase возвращает правильный итератор на следующий элемент, которой стоит после удаленного. Вы этих сдвигов не учитываете, следовательно, при каждом удалении у вас итератор сдвигается на одну позицию дальше.
Будет правильнее сделать так :
C++
1
2
for (std::vector <int>::iterator j = vector.begin(); j < vector.end(); )
     j = vector.erase(j);
А вообще всегда думайте над тем, чтобы заменять поэлементные операции их интервальными аналогами. Да и, в конце концов, если требуется очистить вектор полностью, то почему бы не сделать вызов vector.clear() ?
Цитата Сообщение от diagon Посмотреть сообщение
2.Как с помощью итераторов удалить нули с конца(но если весь массив состоит из нулей, то 1 оставить)?
Пробовал по разному, последний вариант:
не работает код потому что у вас в условии дизъюнкция стоит,когда должна стоять конъюнкция условий. В вашем варианте он будет молотить цикл во-первых, до конца, пока не удалит все элементы( если массив полностью из нулей состоит ), потому что первая часть условия будет оставаться истинной, а потом и вовсе будет исключение о выходе за границы массива.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2011, 13:23
Привет! Вот еще темы с решениями:

Пара вопросов о рандомайзере и RadioButton
1) srand((unsigned)time(NULL)); int rand_ = rand()%10; rand_ будет равен...

Пара вопросов по функторам stl
Доброго времени суток! У меня возникло пара вопросов по функторам. Может кто...

Конструкторы и деструкторы при наследовании. Пара вопросов
1. Можно ли создавать виртуальный конструктор/деструктор и переопределять его...

Доработать программу по итераторам
Используя разработанные классы, решить задачу. Содержимым элемента списка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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