【发布时间】:2021-01-14 01:28:08
【问题描述】:
我正在处理 C++ 20 的最后 4 个,试图学习新的主要特性。 尝试了一些与范围相关的网络代码,我写了:
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);
我错了吗?有人知道如何使用管道样式对视图进行排序吗?
【问题讨论】:
-
他们真的为此选择了
|??? C++ 每次发布都变得更加晦涩...如果重用经典运算符,它应该是&,因为应该有一个逃生舱口(除了 throw)并且&具有短路语义... -
@BitTickler
|被选为与 unix 管道的类比,我相信(对于习惯于那种环境的人来说,这很自然)。按位短路是什么意思? -
@BitTickler
|语法来自 boost::range,大约 2010 年 -
@BitTickler
&没有短路语义。 -
好吧 - 我承认
&和|一样糟糕。但是,某些操作系统具有带有类似符号的命令行 shell 的论点是一个弱论点,恕我直言,因为 C++ 程序员来自各行各业。或者有或者会有明年或者后年使用某种编程语言或环境|作为评论...但是对于 C/C++ 人来说,&和|已经有了固定的含义。另外,我认为这个特性应该带有编译器支持(循环折叠),因此它可以获得自己的新语法。
标签: c++ sorting c++20 std-ranges