crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Присвоение итератора
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Iron Bug Дата 5.8.2015, 10:09
  ты не можешь взять значение (*) итератора str.end(). потому что это не обычный итератор, а специальная абстракция для указания на конец элементов. вызов невалиден и, по идее, должен вызывать ошибку обращения к памяти.
Value Дата 4.8.2015, 16:25
  Понял, спасибо за ответы, решил проблему так:
...
for(QString::iterator it=str.end();it!=str.begin();it--)
    {

        QString r=*(it-1);
        result.operator +=(r);  

    }
...


Но вот странно что, когда я пытался сделать как раньше:
for(QString::iterator it=str.end();it!=str.begin();it--)
    {

        QString r=*it;
        qDebug()<<r;

    }
...

То объекту r присваивалось значение, но его никуда нельзя было добавить, на qDebug() было видно его.

Спасибо!!
lanz Дата 4.8.2015, 13:47
 
Цитата
сами они предлагают делать примерно так:

При STL такой фигни не было :lol:

Вообще странно, потому что в первом посте такая реализация.
А где это они такое рекомендуют?
Нашел, все нашел.


А не работает скорее всего из за разыменования невалидного итератора на первой итерации.
Iron Bug правильный вариант говорит.
Iron Bug Дата 4.8.2015, 10:52
  вообще странно, что в Qt до сих пор не было reverse_iterator.
сами они предлагают делать примерно так:
QString::iterator it = str.end();
while ( it != str.begin() )
{
    --it;
   .....
}

в новых версиях реверс-итераторы уже добавили:
https://codereview.qt-project.org/#/c/109931/
lanz Дата 4.8.2015, 9:15
  Потому что str.end() возвращает невалидный итератор, невалидный итератор нельзя никуда перемещать.
Используйте индексацию [] или .at
http://doc.qt.io/qt-5/qstring.html#at
Value Дата 3.8.2015, 23:01
  Добрый вечер, прошу помочь разобраться с проблемой.
Есть строка QString, в ней текст, пытаюсь эту строку присвоить другой строке, перевернув ее задом на перед, через итератор по-символьно.
Проблема в следующем, почему к строке не прибавляет символ через итератор??
Вот код.
QString str="hello";
    QString result;
    for(QString::iterator it=str.end();it!=str.begin();it--)
    {

        QString r=*it;
        result.operator +=(r);  // result.append(r)  //  result.append(*it)   // result.push_back(r)   и т.д. не помогают.

    }
qDebug()<<result  //строка пустая.


Почему строка пустая ?

Спасибо.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.4.2024, 15:42