Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
1

Пара вопросов по итераторам

09.05.2011, 12:36. Показов 967. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2011, 12:36
Ответы с готовыми решениями:

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

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

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

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

2
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
Эксперт С++
623 / 467 / 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
09.05.2011, 13:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2011, 13:23
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru