我正在处理C++ 20的最后四个主要特性,尝试学习新的主要功能。我从网上找到与范围相关的一些代码,写成了:
std::vector ints{ 6, 5, 2, 8 };
auto even = [](int i) {
return 0 == i % 2;
};
// ranges...
auto rr = ints | std::views::filter(even)
| std::views::transform([](auto i) {
return i * i;
})
| std::views::reverse;
那么我会进行排序,就像range-v3使用的|action::sort
一样,但我已经理解这个实现不同。
我发现的排序方式是:
ints = std::vector(std::ranges::begin(rr), std::ranges::end(rr));
std::ranges::sort(ints);
我错了吗?有人知道如何使用管道样式对视图进行排序吗?
|
是因为它类比于Unix管道,对于习惯这个环境的人来说非常自然。无论如何,你所说的按位与运算的短路是什么意思? - cigien|
语法来自于 boost::range,大约是在2010年左右被引入的。 - Caleth&
没有短路语义。 - Barry&
和|
一样糟糕。但是,那些声称某些操作系统的命令行shell使用类似符号的论点是一个弱论点,在我看来,因为C++程序员来自不同领域。而且,无论是现在还是明年后年,总会有一些使用“|”作为注释的编程语言或环境... 但对于C/C++人员来说,&
和|
已经具有固定的含义。此外,我认为这个特性应该由编译器支持(循环折叠),因此它可以拥有自己的新语法。 - BitTickler