Bla*_*ger 3 c++ c++20 std-ranges
我用 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 << ' ';
}
Run Code Online (Sandbox Code Playgroud)
输入:
1 2 3
4
Run Code Online (Sandbox Code Playgroud)
输出: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
Run Code Online (Sandbox Code Playgroud)