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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Многомдульные преложения http://www.cyberforum.ru/cpp-beginners/thread291591.html
Есть такое задание: Любое задание из лабораторных работ оформить в виде многомодульного приложения с использованием заголовочных файлов. Ребята, подскажите, что и как тут делать надо, последняя...
C++ нужен дебаггер для QT Creator кто знает, киньте мне пожалуйста это важно http://www.cyberforum.ru/cpp-beginners/thread291570.html
Почему программы не видят кодировку cp866? C++
Началось с того, что я попал на ирц чат к разрабам CodeLite с просьбой разобраться с русскими буквами в консоли. Там сказали, что программы использую только те кодировки, которые есть в системе....
Написать программу, которая... C++
Здравствуйте Ув форумчане. Мне нужно написать ряд программ, сам я уже нифига не помню, честно пытался делать. А для тех кто это все знает и помнит, думаю будет пустяком. Я учусь на заочке, а скоро...
C++ Максимальное множество вершин графа http://www.cyberforum.ru/cpp-beginners/thread291542.html
Алгоритм Брона-Кербоша на СИ. Нахождение максимального независимого множества вершин графа, через таблицу смежности. Не могу додуматься как образовать рекурсию.
C++ создать функцию на основе кода (разбиение строки на отрезки) Здравствуйте уважаемые программисты. Мне нужна Ваша помощь. Есть небольшой код программы, суть которой в следующем. На входе есть строка. Программа "разбивает" строку на отрезки по разделителю (в... подробнее

Показать сообщение отдельно
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
09.05.2011, 13:23
Цитата Сообщение от 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru