Я видел фрагмент кода C++ для подсчета количества слов, введенных из стандартного ввода:
#include <iostream>
#include <iterator>
#include <string>
using namespace std;
int main() {
auto ss {
istream_iterator<string>{cin}
};
cout << distance(ss, {}) << endl;
return 0;
}
У меня есть несколько вопросов:
- Какой тип
auto ss
? - Что делает
distance(ss, {})
? Почему он подсчитывает количество слов?
Я предполагаю:
istream_iterator<string>{cin}
преобразует стандартный ввод в типistream_iterator
, автоматически разделяя его пробелом (почему?). Таким образом,ss
выглядит какcontainer
со всеми словами в качестве его элементов;distance(ss, {})
вычисляет расстояние между 1-м элементом и пустым (таким образом, за пределами последнего, но почему?) элементом.
Может ли кто-нибудь помочь мне разобраться с моим предположением об этом фантастическом коротком фрагменте кода?
auto ss {istream_iterator<string>{cin}};
— это просто причудливый способ сказатьistream_iterator<string> ss(cin);
. - person HolyBlackCat   schedule 11.05.2020