英文:
std::views::istream with std::views::take
问题
以下是您要翻译的内容:
我使用 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 << ' ';
}
Input:
1 2 3
4
Output: `1 2 3`
为什么我需要输入 4 个数字而不是 3 个,然后舍弃最后一个?如何解决?
英文:
I compiled the following code with 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 << ' ';
}
Input:
1 2 3
4
Output: 1 2 3
Why do I have to enter 4 numbers instead of 3 and discard the last one? How to solve?
答案1
得分: 6
当您输入完 1 2 3
后,views::istream<int>(std::cin) | views::take(3)
没有到达末尾,因为它的迭代器只指向最后一个元素,并且没有越过末尾。
您可以使用 <kbd>CTRL</kbd>+<kbd>D</kbd>(在Linux中)或 <kbd>CTRL</kbd>+<kbd>Z</kbd>(在Windows中)来终止输入,就像这样:
1 2 3
Ctrl + D
英文:
When you finish typing 1 2 3
, views::istream<int>(std::cin) | views::take(3)
did not reach the end, because its iterator just points to the last element and doesn't pass the end.
You can use <kbd>CTRL</kbd>+<kbd>D</kbd> (for linux) or <kbd>CTRL</kbd>+<kbd>Z</kbd> (for Windows) to terminate the input like
1 2 3
Ctrl + D
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论