Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 24.04.2017
Сообщений: 15

Итераторы. Что не так?

26.09.2018, 09:42. Показов 1568. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Простая программа c использованием Qt: рисую точки при нажатии мыши и сделана анимация для их движения вверх.
Первый вариант:
Не уверен в корректности кода
C++ (Qt)
1
2
3
4
5
6
7
8
for(QList<int>::iterator i=mouse_x.begin(), j=mouse_y.begin(); i!=mouse_x.end(); ++i,++j){
        *i+=0;
        *j-=1;
        if(*j<0){
            mouse_x.erase(i);
            mouse_y.erase(j);
        }
    }
но он работает, до тех пор пока не вылетает ошибка APPCRASH(происходит при большом числе точек)
Имя модуля с ошибкой: Qt5Cored.dll
Версия модуля с ошибкой: 5.10.1.0
Код исключения: 40000015
Очевидно, что причина - что-то ссылается на не существующий элемент(удаленный)
тогда почему при малом числе точек все в порядке?

второй вариант:
будет ли "этот" код быстрее(или медленнее), чем описанный выше
C++ (Qt)
1
2
3
4
5
6
7
8
for(int i=0; i<mouse_x.size(); ++i){
        mouse_x[i]+=0;
        mouse_y[i]-=1;
        if(mouse_y.at(i)<0){
            mouse_x.removeAt(i);
            mouse_y.removeAt(i);
            --i;
        }
какой предпочтительнее использовать?(исправленный первый с итераторами или второй)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.09.2018, 09:42
Ответы с готовыми решениями:

Выдаёт ошибку, пишет что слишком мало аргументов в функции Per, что не так, подскажите
#include &lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; int St (int x) { if (x==0) return 1; return St(x-1)*10;...

C++: итераторы по умолчанию, пустые итераторы, end()
Всем добра! Вопрос на тему итераторов в плюсах: 1. какие значения имеют итераторы без инициализации например,...

Что не так с кодом? ( пытаюсь понять, что не так? )
Есть исходный код. Hook, работает хорошо, но есть минус огромный - перестаёт писать в лог, при открытии программы\игры Фуллскрином. т.е...

3
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
26.09.2018, 10:30
Лучший ответ Сообщение было отмечено paradohs как решение

Решение

paradohs, а вы бы почитали документацию на функцию erase - все бы стало понятно сразу
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
    for(QList<int>::iterator i = mouse_x.begin(), j = mouse_y.begin(); i != mouse_x.end() && j != mouse_y.end(); ) {
        *i += 0;
        *j -= 1;
        if(*j < 0) {
            i = mouse_x.erase(i);
            j = mouse_y.erase(j);
        }
        else {
            ++i;
            ++j;
        }
    }


Цитата Сообщение от paradohs Посмотреть сообщение
тогда почему при малом числе точек все в порядке?
Попытка инкрементировать невалидный итератор - это undefined behavior. Вы же понимаете, что от определения "undefined" какого-то фиксированного поведения ждать трудно?
1
1 / 1 / 0
Регистрация: 24.04.2017
Сообщений: 15
26.09.2018, 11:03  [ТС]
Зачем в языке есть такое? Когда нужна возможность ссылаться на неопределенный объект и получать неопределенный результат? Выйдут ли в новом стандарте "заплатки"?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
26.09.2018, 11:22
Цитата Сообщение от paradohs Посмотреть сообщение
Зачем в языке есть такое?
А как бы вы хотели? Чтобы на этапе исполнения каждую операцию за вами контролировала среда? Ну так таких языков очень много. Вы же понимаете, что это не бесплатно все происходит?

А вот если нам важно, чтобы ресурсы мог контролировать программист, и быть уверенным в большинстве ситуаций, что ничего за кулисами не делается лишнего, то тут подойдут Си или С++.

Цитата Сообщение от paradohs Посмотреть сообщение
Выйдут ли в новом стандарте "заплатки"?
Конечно нет. С такими "заплатками" это будет уже совсем другой язык. Зачем делать еще один C#?

Цитата Сообщение от paradohs Посмотреть сообщение
Когда нужна возможность ссылаться на неопределенный объект и получать неопределенный результат?
Она никогда не нужна. Это ошибка, которую вы допустили в своем коде.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2018, 11:22
Помогаю со студенческими работами здесь

Итераторы и обратные итераторы
У вектора есть два типа итераторов, обычные и обратные итераторы произвольного доступа... Обычные реализовал, осталось обратные. Решил...

И так, что не так с моим запросом на добавление записи в таблицу?
$sql = 'INSERT INTO product ' . '(name, code, price, category_id, brand, availability,' . 'description,...

Как сделать так что я мог умножать не на два числа а на 3,4,5 и так далее?
Вот код: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main(){ float a,c; char b; skip: ...

Что в коде ни так? while не работает так, как ожидаю
Написанный код, как я думаю, должен выдавать цифры от 0 до 1000, столбиком. Но выдает начиная от 702 до 1000. Что ни так понимаю, где...

сегодня так можно сказать праздник так что...
простите меня за все пожалуйста!!!


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru