Поделиться через


basic_istream_view class (стандартная библиотека C++)

Представление последовательных элементов из входного потока.

Синтаксис

template<movable Val, class CharT, class Traits>
    requires default_initializable<Val> &&
    stream_extractable <Val, CharT, Traits>
class basic_istream_view : public view_interface<basic_istream_view<Val, CharT, Traits>>;

Параметры шаблона

CharT
Тип символа потока.

Traits
Необязательно. Содержит сведения о типе символов потока относительно сравнения символов, определении длины строки, состоящей из этого типа символов, и т. д. Примером признака является char_traits<wchar_t>. Если значение не указано, по умолчанию используется char_traits<CharT>значение .

Val
Тип извлекаемых элементов. Например, double учитывая поток: "1.1 2.2 3.3"

stream_extractable ссылается на требование (понятие), которое тип Val можно извлечь из потока с помощью operator>> функции. Это эквивалентно следующему:

template<class Val, class CharT, class Traits>
concept stream_extractable =
  requires(std::basic_istream<CharT,Traits>& is, Val& t) {
    is >> t;
  };

Просмотр характеристик

Описание следующих записей см. в разделе "Просмотр характеристик класса"

Characteristic Description
Адаптер диапазона istream
Базовый диапазон нет
Тип элемента То же самое, что и Val
Просмотр категории итератора input_range
Размер No
Is const-iterable No
Общий диапазон No
Заимствуемый диапазон No

Специализации:istream_view и wistream_view

Шаблоны удобных псевдонимов предоставляются для char и wchar_t потоков, как показано ниже.

1) template<class Val>
using istream_view = ranges::basic_istream_view<Val, char>;

2) template<class Val>
using wistream_view = ranges::basic_istream_view<Val, wchar_t>;

1) Считывает элементы из входного потока, состоящего char из символов.
2) Считывает элементы из входного потока, состоящего wchar_t из символов.

Для 1) и 2) Val относится к типу элементов для извлечения. Например, Val предоставляется double поток: "1.1 2.2 3.3"

Участники

Функции-члены Description
КонструкторыC++20 Создайте basic_istream_view
beginC++20 Прочитайте первое значение и получите итератор для представления.
endC++20 Возвращает std::default_sentinel.

Функции-члены не наследуются от view_interface.

Требования

Заголовок: <ranges> (с C++20)

Пространство имен: std::ranges

Параметр компилятора: /std:c++20 или более поздней версии требуется.

Конструкторы

Создание экземпляра basic_istream_viewобъекта .

constexpr explicit
basic_istream_view(std::basic_istream<CharT, Traits>& stream);

Параметры

stream
Поток, из которого требуется выполнить чтение.

Сведения о типе параметра шаблона см. в разделе "Параметры шаблона".

Возвращаемое значение

Экземпляр класса basic_istream_view. Внутренний basic_istream_view указатель потока инициализируется addressof(stream)в .

Замечания

Лучший способ создания basic_istream_view — использовать views::istream адаптер диапазона. Адаптеры диапазона — это способ создания классов представления. Типы представлений предоставляются в случае, если вы хотите создать собственный тип пользовательского представления.

Пример: basic_istream_view, istream_viewи wistream_view

// requires /std:c++20, or later
#include <ranges>
#include <iostream>
#include <sstream>

int main()
{
    // range adaptor
    std::istringstream streamOfdoubles{ "1.1 2.2 3.3 4.4 5.5" };
    for (const auto& elem : std::views::istream<double>(streamOfdoubles))
    {
        std::cout << elem << ' '; // 1.1 2.2 3.3 4.4 5.5
    }
    std::cout << '\n';

    // range adaptor - create a wistream_view
    std::wistringstream streamOfInts{ L"1 2 3 4 5" };
    for (const auto& elem : std::views::istream<int>(streamOfInts))
    {
        std::cout << elem << ' '; // 1 2 3 4 5
    }
    std::cout << '\n';

    // istream_view alias
    std::istringstream cpu1{ "8 0 8 0" };
    // equivalent std::ranges::istream_view<int, char>
    for (const auto& elem : std::ranges::istream_view<int>{cpu1})
    {
        std::cout << elem; // 8080
    }
    std::cout << '\n';

    // wistream_view alias
    std::wistringstream cpu2{ L"6 5 0 2" };
    // equivalent std::ranges::istream_view<int, wchar_t>
    for (const auto& elem : std::ranges::wistream_view<int>{cpu2})
    {
        std::cout << elem; // 6502
    }
    std::cout << '\n';

    // specify all template arguments
    std::wistringstream misc(L"S T L");
    std::ranges::basic_istream_view<wchar_t, wchar_t, std::char_traits<wchar_t>> basic{misc};
    for (const auto& elem : basic)
    {
        std::wcout << elem << ' '; // S T L
    }
}
1.1 2.2 3.3 4.4 5.5
1 2 3 4 5
8080
6502
S T L

begin

Прочитайте первое значение и получите итератор в представление.

constexpr auto begin();

Параметры

Нет.

Возвращаемое значение

Итератор, указывающий на первый элемент в элементе basic_istream_view.

end

Получите sentinel в конце представления.

constexpr std::default_sentinel_t end() const noexcept;

Параметры

Нет.

Возвращаемое значение

default_sentinel_t

См. также

<ranges>
Просмотр классов