Хочу заполнить вектор со стандартного потока ввода cin с использованием std::istream_iterator.
Есть такой код:
#include<iostream>
#include<iterator>
#include<vector>
int main()
{
std::istream_iterator< int > in(std::cin);
std::istream_iterator< int > end;
typedef std::vector< int > int_vector;
int_vector data;
std::back_insert_iterator< int_vector > target(data);
while (in != end)
{
*target = *in;
++in;
++target;
}
std::ostream_iterator<int> out(std::cout, ", ");
std::copy(data.begin(), data.end(), out);
return 0;
}
Отсюда два вопроса:
int, а double например)?in == end в конце ввода (EOF) или если любая ошибка ввода произошла. Поэтому если цикл у вас преждевременно завершится, то это значит что произошла ошибка. Её можно обнаружить, проверив достиг ли ввод конца: cin.eof():
#include <iostream>
#include <iterator>
#include <vector>
int main() {
std::istream_iterator<int> numbers { std::cin }, eof;
// populate vector
std::vector<int> v;
std::copy(numbers, eof, std::back_inserter(v));
// print vector
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n"));
return !std::cin.eof(); // success on eof
}
Пример.
Что равнозначно:
#include <iostream>
#include <iterator>
#include <vector>
int main() {
// populate vector
std::vector<int> v;
for (int n; std::cin >> n; )
v.push_back(n);
// print vector
for (int n : v)
std::cout << n << '\n';
return !std::cin.eof(); // success on eof
}
Пример.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости