C++20 ranges and sorting(C++20范围和排序)
本文介绍了C++20范围和排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在处理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);
我说错了吗?有人知道如何使用管道样式对视图进行排序吗?
推荐答案
然后我将进行排序,就像Range-v3对
|action::sort
所做的那样...
不,您不能实际按如下方式对rr
进行排序:
rr |= ranges::actions::sort; // error
因为rr
是view
。虽然view
可以提供对基础范围的可变访问,但sort
还需要该范围来支持随机访问。延迟生成的view
Likerr
不允许这样。
您可以像您所做的那样从rr
创建vector
,然后可以对该范围使用actions
:
ints |= ranges::actions::sort; // ok
但是,c++20没有任何actions
(希望我们能在c++23中获得它们),所以在此之前,您必须在没有管道语法的情况下调用算法sort
:
std::ranges::sort(ints); // ok
这篇关于C++20范围和排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:C++20范围和排序
基础教程推荐
猜你喜欢
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04