std::istream_iterator

std::istream_iterator (입력 스트림 반복자)

생성된 std::basic_istream 객체에서 적절한 operator>>를 호출해 타입 T의 연속된 객체들을 읽는 단일 패스 입력 반복자예요. C++11부터 있어요.

출처: cppreference

본문

<iterator> 헤더에 정의돼 있어요.

// C++17 이전
template< class T, class CharT = char, class Traits = std::char_traits<CharT>,
          class Distance = std::ptrdiff_t >
class istream_iterator
    : public std::iterator<std::input_iterator_tag, T, Distance, const T*, const T&>;

// C++17부터
template< class T, class CharT = char, class Traits = std::char_traits<CharT>,
          class Distance = std::ptrdiff_t >
class istream_iterator;

std::istream_iterator는 생성된 std::basic_istream 객체에서 operator>>를 호출해 타입 T의 연속된 객체들을 읽는 단일 패스 입력 반복자예요. 실제 읽기 연산은 역참조 때가 아니라 반복자가 증가될 때 수행돼요. 첫 객체는 반복자가 생성될 때 읽혀요. 역참조는 가장 최근에 읽은 객체의 사본만 돌려줘요.

기본 생성된 std::istream_iterator는 end-of-stream 반복자예요. 실제 istream_iterator가 end-of-stream에 도달하면 끝 반복자와 같아져요. 실패한 operator>> 후에도 end-of-stream 반복자가 돼요.

멤버 타입

멤버 타입 정의
iterator_category std::input_iterator_tag
value_type T
difference_type Distance
pointer const T*
reference const T&
char_type CharT
traits_type Traits
istream_type std::basic_istream<CharT, Traits>

멤버 함수

  • (constructor) — 입력 반복자를 구성해요(기본이면 끝 반복자).
  • (destructor) — 소멸자.
  • operator= — 내용을 할당해요.
  • operator* — 이전에 읽은 값을 돌려줘요.
  • operator-> — 이전에 읽은 값을 가리켜요.
  • operator++ — 스트림에서 다음 값을 읽어요.

예제

#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>

int main()
{
    std::istringstream str("1 2 3 4 5");
    std::istream_iterator<int> it(str), end;
    std::vector<int> v(it, end); // 1,2,3,4,5 읽기
    for (int n : v) std::cout << n << ' '; // "1 2 3 4 5 "
}

더 알아보기 (Learn more)

cppreference