Я скомпилировал следующий код с помощью g++ 12.2.1:
#include <iostream>
#include <ranges>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> vi;
std::ranges::copy(std::views::istream<int>(std::cin) | std::views::take(3), std::back_inserter(vi));
for (auto i : vi)
std::cout << i << ' ';
}
Вход:
1 2 3
4
Выход: 1 2 3
Почему я должен вводить 4 числа вместо 3 и отбрасывать последнее? Как решить?
Когда вы заканчиваете печатать 1 2 3, views::istream<int>(std::cin) | views::take(3) не доходит до конца, потому что его итератор просто указывает на последний элемент и не ️проходит конец.
Вы можете использовать CTRL+D (для Linux) или CTRL+Z (для Windows), чтобы завершить ввод, например
1 2 3
Ctrl + D