интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
||||||
1 | ||||||
Итератор и проверка на чётность/нечётность02.09.2012, 23:02. Показов 4932. Ответов 15
Метки нет (Все метки)
Добрый день. Не получается организовать проверку на нечётное количество. При вводе нечётного количества данных программа выдаёт ошибку. Последнюю часть задания прошу не делать, а помочь только с организацией проверки. Сильно "заумный" код прошу не предлагать т.к. только 120 страница учебника для начинающих.
0
|
02.09.2012, 23:02 | |
Ответы с готовыми решениями:
15
Проверка числа на чётность/нечётность Проверка числа типа double на чётность/нечётность Не могу понять, как работает проверка на нечётность Проверка числа на чётность |
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
|
|
02.09.2012, 23:11 | 2 |
Итераторы ничего не знают о своем контейнере. Соответственно я думаю и об индексах в нем тоже...
Судя по условию
1
|
02.09.2012, 23:37 | 3 | |||||
1
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
|
03.09.2012, 00:02 [ТС] | 4 |
точно, должно получиться
Добавлено через 1 минуту эта функция мне не знакома, хотя смысл её ясен. Какому классу она принадлежит? Хотя по коду кажется что к iterator
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
03.09.2012, 00:09 | 5 |
Ни к какому, она глобальная. Работает на всех итераторах.
0
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
|
03.09.2012, 00:11 [ТС] | 6 |
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
03.09.2012, 00:16 | 7 |
То, что она глобальная, ещё не значит, что она входит в стандартное ядро языка и не надо подключать нужные хедеры.
И в одном хедере не обязательно лежит один класс; там может быть что угодно. Да итераторы бывают разных типов. <iterator> содержит кроме них заодно и прототип этой функции, и других тоже.
1
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
03.09.2012, 03:28 | 8 | |||||
29 строку напишите так:
1
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
||||||
03.09.2012, 20:10 [ТС] | 9 | |||||
я так понял, что при применении инструкции if в теле цикла приведёт к логической ошибке. Даже если количество операндов чётное, будет обращение инструкции if к ivec.end, что приведёт к ошибке. Нужно организовать код таким образом, что если итератор обращается к ivec.end, цикл прекратился и вывело сообщение о том, что последний операнд не имеет пары. Версия представленная уважаемым igorrr37 безусловно решает задачу, но мне бы хотелось узнать как можно организовать код без всяких "наворотов" типа функции distance().
0
|
03.09.2012, 21:09 | 11 | |||||
эту ф-цию можно заменить разностью итераторов
1
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
03.09.2012, 21:09 | 12 | |||||
Вот ваш код, с этим испрвлением, и результат его работы:
1
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
||||||
03.09.2012, 21:40 [ТС] | 13 | |||||
Да, будте добры разтолкуйте функции кода:
Да, за break забыл)
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
03.09.2012, 21:46 | 14 |
При нечётном числе. Последняя итерация. Пары обработаны, в цикле for() итератор увеличится и станет равным end() - 1. Это указатель на последний элемент. Так как итератор равен end() - 1, то будет заход в if. Там последний элемент выведется на консоль с надписью: " have not pair". В else захода нет. В for итератор увеличивается, становится равным end(). Выход из for(). При чётном числе. Последняя итерация. В цикле for() итератор увеличится и станет равным end() - 2. Это указатель на последнюю пару. В 19 строке значение первого элемента пары сохраняется. Так как итератор равен end() - 2, то захода в if не будет, а будет заход в else. Там итератор увеличится и станет указывать на последний элемент (второй элемент пары) (end() - 1). В следующей строке, значение этого элемента сохраняется, дальше он складывается с первым элементом пары (сохранённым в 19 строке) и сумма выводится. В for итератор увеличивается, становиться равным end(). Выход из for().
1
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
|
03.09.2012, 22:01 [ТС] | 15 |
огромное СПАСИБО! Всё разжёвано до мелочей
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
03.09.2012, 22:09 | 16 |
До кучи. Если исправления нет. Нечётное число элементов. В последней итерации цикла, когда iter равен end() - 1 и указывает на последний элемент вектора , захода в if не будет (условие захода равенсто end()), а будет заход в else. Там итератор увеличится, станет равным end(), т.е. будет указывать на область за границей вектора. Дальше будет попытка присвоить значение из этой области переменной second, что вызовет ошибку.
0
|
03.09.2012, 22:09 | |
03.09.2012, 22:09 | |
Помогаю со студенческими работами здесь
16
Проверка введенного числа на чётность Проверка чисел на чётность или наоборот, дальнейший вывод Реализовать двусвязный список (list), итератор (iterator) и константный итератор (сonst_iterator) для списка Как проверить значение на нечётность и отрицательность? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |