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 "
}