РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
343 of 815 menu

Категория input_iterator

Категория input_iterator - это одна из категорий итераторов в C++, которая описывает итераторы, предназначенные для последовательного одноразового чтения элементов из диапазона. Такой итератор позволяет перемещаться только вперёд, по одному элементу за раз, и гарантирует, что каждый элемент может быть прочитан ровно один раз. В отличие от более сильных категорий, input_iterator не требует возможности повторного прохода по диапазону и не позволяет изменять элементы через итератор. Типичными примерами являются итераторы чтения из входного потока, например istream_iterator.

Итератор категории input_iterator поддерживает операцию разыменования * для чтения текущего элемента, операцию инкремента ++ для перехода к следующему элементу, а также сравнение на равенство и неравенство == и !=. Копирование такого итератора допускается, но после инкремента одной из копий все остальные копии могут стать недействительными.

Синтаксис

// Проверка, является ли тип итератором ввода #include <iterator> std::input_iterator<T> // Концепт из C++20 template<class I> concept input_iterator = /* ... */;

Пример

Давайте проверим с помощью концепта std::input_iterator, является ли итератор вектора итератором ввода:

#include <iostream> #include <vector> #include <iterator> using namespace std; int main() { vector<int> vec = {1, 2, 3, 4, 5}; if (input_iterator<decltype(vec.begin())>) { cout << "input_iterator" << endl; } else { cout << "not input_iterator" << endl; } return 0; }

Результат выполнения кода:

"input_iterator"

Пример

Давайте прочитаем элементы из входного потока с помощью istream_iterator, который является классическим примером итератора ввода, и выведем их:

#include <iostream> #include <iterator> #include <sstream> using namespace std; int main() { istringstream stream("1 2 3 4 5"); istream_iterator<int> it(stream); istream_iterator<int> end; while (it != end) { cout << *it << " "; ++it; } return 0; }

Результат выполнения кода:

1 2 3 4 5

Пример

Давайте воспользуемся алгоритмом copy, который принимает итераторы ввода, чтобы скопировать данные из потока в вектор:

#include <iostream> #include <vector> #include <iterator> #include <algorithm> #include <sstream> using namespace std; int main() { istringstream stream("1 2 3 4 5"); istream_iterator<int> it(stream); istream_iterator<int> end; vector<int> res; copy(it, end, back_inserter(res)); for (int num : res) { cout << num << " "; } return 0; }

Результат выполнения кода:

1 2 3 4 5

Смотрите также

  • категория forward_iterator,
    которая позволяет многократный проход по диапазону
  • категория bidirectional_iterator,
    которая позволяет двигаться в обоих направлениях
  • категория random_access_iterator,
    которая поддерживает произвольный доступ к элементам
  • функция advance,
    которая перемещает итератор на заданное число позиций
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить