Итерация элементов std :: string - PullRequest
1 голос
/ 21 июня 2010

Требуется ли постоянное время для перемещения итератора к элементам строки следующим образом:

std::string str // string of size 100 MB
std::string::iterator iter = str.begin();
std::advance(iter, str.size()-1);

это займет постоянное время, как при поиске по индексу?

char c = str[str.size()-1];

Ответы [ 2 ]

3 голосов
/ 21 июня 2010

Да, это правильно. Это гарантируется стандартом C ++ (§ 24.3, Операции итератора):

Так как только итераторы произвольного доступа предоставить + и - операторы, библиотека предоставляет два шаблона функций заранее и расстояние. Эти функции шаблоны используют + и - для случайных итераторы доступа (и, следовательно, постоянное время для них);

0 голосов
/ 21 июня 2010

С какой стати вы бы использовали верхний код вместо str.end () - 1?

Редактировать: Или str.back (), который гораздо более универсален для контейнера.

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