Итератор для конкретного символа в std :: string - PullRequest
2 голосов
/ 16 декабря 2011

Мне нужен итератор для конкретного символа в std::string, без зацикливания с начала.

Это лучший способ сделать это?

std::string s("abcdefg...");
size_t id = 5;
std::string::const_iterator it = s.begin();
std::advance(it, id - 1);

Ответы [ 2 ]

4 голосов
/ 16 декабря 2011

Поскольку итераторы std::string имеют произвольный доступ, вы можете сделать это напрямую:

std::string::const_iterator it = s.begin() + (id-1);

(Это то, что std::advance в конечном итоге расширяется для итераторов произвольного доступа.)

4 голосов
/ 16 декабря 2011

Вы также можете просто сделать:

std::string::const_iterator it = s.begin() + (id-1);

, хотя он должен иметь более или менее одинаковую производительность std::advance, поскольку, если it является итератором произвольного доступа, advance использует operator+ (в противном случае он возвращается к циклу; это происходит, например, для list итераторов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...