데이터 스트림을 처리 할 때 템플릿 및 반복기 측면에서 코드를 작성하는 것이 좋습니다. 종종 다음 캐릭터를 "엿보기"해야합니다.std :: istreambuf_iterator std :: ifstream을 사용하여 "peek"
template <class I>
I next(I it) {
return ++it;
}
은 물론,이, 반복자의 복사본을 만드는 사본을 증가하고 반환 코드가 더-양방향 반복자를 처리하지 할 수 있도록하기 위해, 나는이처럼 보이는 조각이있다. 이것은 매우 멋지게 작동하는 경향이 있습니다 ... std::istreambuf_iterator
이 std::ifstream
에서 작동하는 경우를 제외하고는. 예를 들어, 내용 "ABCD
", 다음과 같은 코드를 사용하여 파일 "test.txt
을"주어진 :
#include <fstream>
#include <iostream>
template <class I>
I next(I it) {
return ++it;
}
int main() {
std::ifstream file("test.txt", std::ios::binary);
std::istreambuf_iterator<char> it(file);
std::cout << *next(it) << std::endl;
std::cout << *it << std::endl;
}
출력은 다음과 같습니다
대신 내가 바라는 것의$ ./test
B
B
:
$ ./test
B
A
즉, 반복기의 복사본 하나를 증가 시키면 순차적으로 이 증가하고 그 중 개가 복사됩니다.
필자는 파일 스트림 반복기가 현재 파일과 관련된 읽기 버퍼에있는 것만 조작 할 수 있다는 점에서 한계가 있음을 알고 있습니다. 그래서 내가 원하는 것과 정확히 일치하는 해결책이 없을 수도 있습니다. 내가 원하는 것을 할 수있는 방법이 있습니까?
예, 알았어요. 그래서 내가 "그물 효과"라고 말했다. 나는 그 캐릭터가 증가함으로써 "소비"되었다는 것을 알았고, 나는 단지 내가 원하는 것을 영리하게하기를 희망했다. –
명시 적으로 '탐색'해야합니다. iternator는 그런 식으로 작동하지 않습니다. –