Как посмотреть на следующее значение строкового итератора - PullRequest
4 голосов
/ 08 января 2010

В цикле, проходящем по всему string как посмотреть следующее значение итератора?

for (string::iterator it = inp.begin(); it!= inp.end(); ++it)
{
  // Just peek at the next value of it, without actually incrementing the iterator
}

Это довольно просто в C,

for (i = 0; i < strlen(str); ++i) {
     if (str[i] == str[i+1]) {
         // Processing
     }
}

Любой эффективный способ сделать выше в C ++?

Примечание: я не использую Boost.

Ответы [ 2 ]

5 голосов
/ 08 января 2010
if ( not imp.empty() )
{
    for (string::iterator it = inp.begin(); it!= inp.end(); ++it)
         if (it + 1 != inp.end() and *it == *(it + 1)) {
             // Processing
         }
    }
}

или

if ( not imp.empty() )
{
    for (string::iterator it = inp.begin(); it!= inp.end() - 1; ++it)
        if ( *it == *(it+1) ) {
            // Processing
        }
    }
}
2 голосов
/ 08 января 2010

string обеспечивает итератор произвольного доступа, поэтому operator+(int) существует. Вы можете использовать ответ Shmoopty, красиво и легко.

Если бы вы использовали list<>, который предоставляет только двунаправленный итератор, вы бы сохранили второй итератор.

for (list<char>::iterator it(inp.begin()), next(it);
        it != inp.end() && ++next != inp.end(); it = next) {
    if (*it == *next) {
        // Processing
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...