Категория forward_iterator
Категория forward_iterator описывает
однонаправленный итератор в C++. Такой
итератор умеет читать элементы, изменять
их и перемещаться по последовательности
только вперед. В отличие от
input_iterator,
однонаправленный итератор можно
копировать, сохранять копии и проходить
последовательность несколько раз. При
этом в первый параметр обычно передается
сам итератор, а во второй - количество
шагов или другой итератор для сравнения.
Синтаксис
#include <iterator>
// проверка категории итератора
std::forward_iterator<It>
// основные операции
*it
++it
it++
it1 == it2
it1 != it2
Пример
Давайте создадим однонаправленный итератор для списка и пройдем по нему до конца:
#include <iostream>
#include <list>
#include <iterator>
using namespace std;
int main()
{
list<int> lst = {1, 2, 3, 4, 5};
forward_list<int>::iterator it = lst.begin();
while (it != lst.end())
{
cout << *it << " ";
++it;
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 2 3 4 5
Пример
Давайте проверим, что итератор списка
относится к категории
forward_iterator:
#include <iostream>
#include <list>
#include <iterator>
using namespace std;
int main()
{
list<int>::iterator it;
if (is_same<
iterator_traits<list<int>::iterator>::iterator_category,
forward_iterator_tag
>::value)
{
cout << "forward_iterator" << endl;
}
else
{
cout << "other iterator" << endl;
}
return 0;
}
Результат выполнения кода:
"forward_iterator"
Пример
Давайте изменим элементы контейнера через однонаправленный итератор:
#include <iostream>
#include <forward_list>
using namespace std;
int main()
{
forward_list<int> lst = {1, 2, 3, 4, 5};
for (auto it = lst.begin(); it != lst.end(); ++it)
{
*it = *it * 2;
}
for (auto it = lst.begin(); it != lst.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
2 4 6 8 10
Смотрите также
-
категория
input_iterator,
которая описывает итератор только для чтения -
категория
bidirectional_iterator,
которая позволяет двигаться назад -
категория
random_access_iterator,
которая поддерживает произвольный доступ -
функция
advance,
которая сдвигает итератор на заданное число шагов