Присвоение итератора |
Здравствуйте, гость ( Вход | Регистрация )
Присвоение итератора |
Гость_Value_* |
3.8.2015, 23:01
Сообщение
#1
|
Гости |
Добрый вечер, прошу помочь разобраться с проблемой.
Есть строка QString, в ней текст, пытаюсь эту строку присвоить другой строке, перевернув ее задом на перед, через итератор по-символьно. Проблема в следующем, почему к строке не прибавляет символ через итератор?? Вот код.
Почему строка пустая ? Спасибо. |
|
|
lanz |
4.8.2015, 9:15
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Потому что str.end() возвращает невалидный итератор, невалидный итератор нельзя никуда перемещать.
Используйте индексацию [] или .at http://doc.qt.io/qt-5/qstring.html#at |
|
|
Iron Bug |
4.8.2015, 10:52
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
вообще странно, что в Qt до сих пор не было reverse_iterator.
сами они предлагают делать примерно так:
в новых версиях реверс-итераторы уже добавили: https://codereview.qt-project.org/#/c/109931/ |
|
|
lanz |
4.8.2015, 13:47
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Цитата сами они предлагают делать примерно так: Нашел, все нашел. А не работает скорее всего из за разыменования невалидного итератора на первой итерации. Iron Bug правильный вариант говорит. Сообщение отредактировал lanz - 4.8.2015, 13:45 |
|
|
Гость_Value_* |
4.8.2015, 16:25
Сообщение
#5
|
Гости |
Понял, спасибо за ответы, решил проблему так:
Но вот странно что, когда я пытался сделать как раньше:
То объекту r присваивалось значение, но его никуда нельзя было добавить, на qDebug() было видно его. Спасибо!! |
|
|
Iron Bug |
5.8.2015, 10:09
Сообщение
#6
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
ты не можешь взять значение (*) итератора str.end(). потому что это не обычный итератор, а специальная абстракция для указания на конец элементов. вызов невалиден и, по идее, должен вызывать ошибку обращения к памяти.
|
|
|
Текстовая версия | Сейчас: 30.1.2025, 4:43 |