std::istreambuf_iterator는 형식화되지 않은 추출을 위한 반복자입니다. 생성자를 통해 제공된 std::streambuf 객체에서 직접 작동합니다. 따라서 파일 형식에 대해 걱정하지 않고 파일의 내용이 필요하면 이 반복자를 사용하면 됩니다. 예를 들어, 전체 파일을 문자열이나 컨테이너로 읽으려고 하는 경우가 있습니다. 이런 경우, 정규 형식의 추출기는 앞 공백을 버리고 추출된 토큰만을 변환합니다. 하지만 버퍼 이터레이터는 다르게 동작합니다.
std::string str(std::istreambuf_iterator<char>{file}, {});
반복자는 어디를 가리키고 있을까요?
기본 생성 스트림 반복자는 단순히 스트림의 끝을 나타내는 특수한 센티넬 객체입니다. IOStream은 하나의 패스이므로 해당 지점까지 읽을 때까지 실제로 끝을 가리킬 수 있는 방법이 없습니다. 내부적으로 추출에 실패하거나 읽기가 파일 끝에 도달할 떄 스트림 (또는 스트림 버퍼)으로 구성된 반복자는 종료 스트림 반복자로 변경됩니다. 이것은 표준 알고리즘이 외부에서 일반 반복자처럼 작동하기 때문에 스트림 반복자와 함께 이해하는 데 도움이됩니다.
저는 파일명을 그대로 읽어와야 할떄는 아래를 사용합니다. 하지만 특정한 자료형태로 읽어와야 하는 경우에는 위 방식을 활용하고 있습니다.
관련된 정보들은 어디에서 확인할 수 있을까요? 많은 곳에서 확인을 할 수 있습니다. 하지만, 공식적으로 표준 cppreference에서 관련 설명을 찾을 수도 있습니다.
'SW > C++' 카테고리의 다른 글
C++ : STL : 목적, 문제점, 대체 방법 (0) | 2020.03.15 |
---|---|
C++11 : Threading 라이브러리 ( 쓰레드 구현, 사용 방법 ) (0) | 2019.12.23 |
C++ : 출력 : 개념, 예제, 활용, 사용법 (0) | 2019.06.02 |
C++ : 프로그래머스 : 가운데 글자 가져오기 : 풀이 (0) | 2019.05.30 |
C++ : 비전과 장점, 커리어 고민 (0) | 2019.05.29 |