코드에서 cin >> s
은 입력 스트림에서 std::string
을 읽으려고합니다. 시도가 성공하면 cin >> s
의 반환 값은 암시 적으로 true
으로 변환되고 while 루프는 계속 증가하여 카운터를 증가시킵니다. 그렇지 않으면 입력 스트림에서 읽을 데이터가 더 이상 없으므로 시도가 실패하면 while 루프가 종료됩니다.
당신은 다음과 같이 말씀을 계산하는 std::distance
를 사용할 수 있습니다
는
#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>
int main() {
std::istream_iterator<std::string> begin(std::cin), end;
size_t count = std::distance(begin, end);
std::cout << count << std::endl;
return 0;
}
데모 :이 코드에서 http://www.ideone.com/Hldz3
, 당신은 std::distance
기능을 모두 통과, 두 반복자 begin
및 end
을 만들 수 있습니다. 이 함수는 begin
과 end
사이의 거리를 계산합니다. 거리는 입력 스트림의 문자열 수에 불과합니다. 반복자 begin
은 입력 스트림에서 오는 문자열을 반복하며, 은 반복자의 끝을 정의합니다. 여기서 begin
은 반복을 중지합니다. std::istream_iterator
에 템플릿 인수가 std::string
때문에 문자열을 통해 begin
반복이 이유는 : 당신이 char
로 변경하는 경우
std::istream_iterator<std::string> begin(std::cin), end;
//^^^^^^^^^^^
, 다음 begin
다음과 같은 프로그램의 문자 수를 계산합니다 의미 이상 char
반복자합니다 입력 스트림 :
#include <iostream>
#include <algorithm>
#include <iterator>
int main() {
std::istream_iterator<char> begin(std::cin), end;
size_t count = std::distance(begin, end);
std::cout << count << std::endl;
return 0;
}
데모 : http://www.ideone.com/NH52y
심 마찬가지로 <iterator>
헤더의 이터레이터와 <algorithm>
헤더의 일반 함수를 사용하면 많은 멋진 작업을 수행 할 수 있습니다.
예를 들어, 입력 스트림에서 줄 수를 계산하려고한다고 가정 해 보겠습니다. 그렇다면 위 프로그램을 통해 어떤 변화가 생길 것입니까?문자 수를 계산할 때 std::string
을 char
으로 변경하는 방법은 즉시 line
(char
대신)을 반복 할 수 있도록이 값을 line
으로 변경해야한다고 제안합니다. 표준 라이브러리에 존재하지
클래스 line
더, 우리는 하나의 자신, 을 정의했습니다하지만 흥미로운 점은 아래 그림과 같이 우리가 전체 작업 코드와 함께, 그것을 빈을 유지할 수 있다는 것입니다 :
#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>
struct line {}; //Interesting part!
std::istream& operator >>(std::istream & in, line &)
{
std::string s;
return std::getline(in, s);
}
int main() {
std::istream_iterator<line> begin(std::cin), end;
size_t count = std::distance(begin, end);
std::cout << count << std::endl;
return 0;
}
예, line
과 함께 line
에 대해서도 operator>>
을 정의해야합니다. 그것은 std::istream_terator<line>
클래스에서 사용됩니다.
데모 : http://www.ideone.com/iKPA6이
사실 두 가지 공통점이 있습니다. 하나는 그가 보여 주듯이, 다른 하나는 EOF 또는 다른 오류가 조기에 발생하면 비참하게 실패합니다. –