Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Итераторы
Итератор — это объект, выполняющий в контейнере роль указателя. С помощью итератора можно перемещаться внутри контейнера и получать доступ к отдельным элементам. В классе basic_string
определены следующие типы итераторов:
iterator
— итератор. При увеличении значения итератор перемещается к концу строки. Пример объявления переменной:
std::string::iterator it;
const_iterator
— константный итератор. Изменить значение, на которое ссылается итератор, нельзя. Пример объявления переменной:
std::string::const_iterator it;
reverse_iterator
— обратный итератор. При увеличении значения итератор перемещается к началу строки. Пример объявления переменной:
std::string::reverse_iterator it;
const_reverse_iterator
— константный обратный итератор. Изменить значение, на которое ссылается итератор, нельзя. Пример объявления переменной:
std::string::const_reverse_iterator it;
Присвоить значения переменным позволяют следующие методы:
begin()
— возвращает итератор, установленный на первый символ строки. Прототипы метода:
iterator begin() noexcept;
const_iterator begin() const noexcept;
Выведем первый символ строки:
std::string str("String");
std::basic_string<char>::iterator it;
it = str.begin();
std::cout << *it << std::endl; // S
Вместо метода begin()
можно воспользоваться шаблонной функцией begin()
:
std::string str("String");
std::basic_string<char>::iterator it = std::begin(str);
std::cout << *it << std::endl; // S
end()
— возвращает итератор, установленный на позицию после последнего символа строки. Прототипы метода:
iterator end() noexcept;
const_iterator end() const noexcept;
Выведем последний символ строки:
std::string str("String");
std::string::iterator it;
it = str.end();
std::cout << *(--it) << std::endl; // g
Вместо метода end()
можно воспользоваться шаблонной функцией end()
:
std::string str("String");
std::string::iterator it = std::end(str);
std::cout << *(--it) << std::endl; // g
cbegin()
— возвращает константный итератор, установленный на первый символ строки. Прототип метода:
const_iterator cbegin() const noexcept;
cend()
— возвращает константный итератор, установленный на позицию после последнего символа строки. Прототип метода:
const_iterator cend() const noexcept;
rbegin()
— возвращает обратный итератор, установленный на последний символ строки. Прототипы метода:
reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;
Выведем последний символ строки:
std::string str("String");
std::string::reverse_iterator it;
it = str.rbegin();
std::cout << *it << std::endl; // g
rend()
— возвращает обратный итератор, установленный на позицию перед первым символом строки. Прототипы метода:
reverse_iterator rend() noexcept;
const_reverse_iterator rend() const noexcept;
Выведем первый символ строки:
std::string str("String");
std::string::reverse_iterator it;
it = str.rend();
std::cout << *(--it) << std::endl; // S
crbegin()
— возвращает константный обратный итератор, установленный на последний символ строки. Прототип метода:
const_reverse_iterator crbegin() const noexcept;
crend()
— возвращает константный обратный итератор, установленный на позицию перед первым символом строки. Прототип метода:
const_reverse_iterator crend() const noexcept;
С итераторами можно производить такие же операции, как и с указателями. Чтобы получить или изменить значение, на которое ссылается итератор, перед названием переменной указывается оператор *
(*it
). Перемещение итератора осуществляется с помощью операторов +
, -
, ++
и --
. Кроме того, итераторы можно сравнивать с помощью операторов сравнения. В качестве примера изменим значение первого символа, а затем выведем все символы строки в прямом и обратном порядке с помощью цикла for
(листинг 9.1).
Листинг 9.1. Перебор символов в строке с помощью итераторов
#include <iostream>
#include <string>
int main() {
std::string str("String");
std::string::iterator it1, it2;
std::string::reverse_iterator it3, it4;
it1 = str.begin();
*it1 = 's'; // Изменение значения
// Перебор символов в прямом порядке
for (it1 = str.begin(), it2 = str.end(); it1 != it2; ++it1) {
std::cout << *it1 << std::endl;
}
std::cout << "------------------" << std::endl;
// Перебор символов в обратном порядке
for (it3 = str.rbegin(), it4 = str.rend(); it3 != it4; ++it3) {
std::cout << *it3 << std::endl;
}
return 0;
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов