The Ranges Library --- C++20

The Ranges Library — C++20

ranges可以让我们更加舒服的写代码了, 不用再敲那么多的代码

之前我们需要这样标准库的算法对容器的操作

#include <iostream>
#include <ranges>
#include <vector>
#include <algorithm>int main()
{std::vector vec{ 1,5,67,8 };std::sort(vec.begin(), vec.end());for (auto value : vec){std::cout << value << std::endl;}
}

有了std::ranges就可以

直接作用于容器

#include <iostream>
#include <ranges>
#include <vector>
#include <algorithm>int main()
{std::vector vec{ 1,5,67,8 };std::ranges::sort(vec);for (auto value : vec){std::cout << value << std::endl;}
}

std::ranges::sort可以直接作用于容器

懒执行

std::ranges::iota用于生成一个序列

示例如下:

#include <iostream>
#include <ranges>
#include <vector>
#include <algorithm>using namespace std;int main()
{for (auto value : std::views::iota(1, 10)){cout << value << " ";}cout << endl;cout << endl;for (auto value : std::views::iota(1) | std::views::take(10)) // 取10个数{cout << value << " ";}cout << endl;cout << endl;for (auto value : std::views::iota(1) | std::views::take_while([](auto i) { return i < 9; })){cout << value << " ";}cout << endl;cout << endl;
}

函数组合

我们可以使用std::views::filter实现更复杂的逻辑

比如求素数

#include <iostream>
#include <ranges>
#include <vector>
#include <algorithm>using namespace std;bool isPrime(int i)
{for (int j = 2; j * j <= i; ++j){if (i % j == 0) return false;}return true;
}int main()
{auto add = [](int i) { return i % 2 == 1; };for (int i : std::views::iota(1)| std::views::filter(add)| std::views::filter(isPrime)| std::views::take(100)){cout << i << "  ";}cout << "\n";
}

std::views::iota(1) 从 1 开始—> std::views::filter(add)是奇数—> std::views::filter(isPrime)是素数—>std::views::take(100)取前 100 个数

数据的流动是怎么开始的呢? 是从右到左, std::views::take(10) 希望有下一个值,因此需要询问其前,直到for-loop产生符合要求的数字

比较stdstd::ranges算法

比较一下std::sortstd::ranges::sort

  • std::sort
template< class RandomIt >
constexpr void sort( RandomIt first, RandomIt last );template< class ExecutionPolicy, class RandomIt >
void sort( ExecutionPolicy&& policy,RandomIt first, RandomIt last );template< class RandomIt, class Compare >
constexpr void sort( RandomIt first, RandomIt last, Compare comp );template< class ExecutionPolicy, class RandomIt, class Compare >
void sort( ExecutionPolicy&& policy,RandomIt first, RandomIt last, Compare comp );
  • std::ranges::sort
template <std::random_access_iterator I, std::sentinel_for<I> S,class Comp = ranges::less, class Proj = std::identity>
requires std::sortable<I, Comp, Proj>
constexpr I sort(I first, S last, Comp comp = {}, Proj proj = {});template <ranges::random_access_range R, class Comp = ranges::less, class Proj = std::identity>
requires std::sortable<ranges::iterator_t<R>, Comp, Proj>
constexpr ranges::borrowed_iterator_t<R> sort(R&& r, Comp comp = {}, Proj proj = {});

预知后事如何, 请听下回分解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是反射(.NET)[转]

From: http://www.cnblogs.com/zxsoft/archive/2007/09/17/895236.html 反射&#xff08;Reflection&#xff09;是.NET中的重要机制&#xff0c;通过放射&#xff0c;可以在运行时获得.NET中每一个类型&#xff08;包括类、结构、委托、接口和枚举等&#xff09;的成员&#x…

Yii权限管理工具Srbac使用小结

一、关于Srbac Srbac是基于Yii 框架的 RBAC&#xff08;基于角色的访问控制&#xff09; 插件模块&#xff0c;用于帮助Yii开发人员更方便地进行权限控制&#xff0c;在实际应用过程中也比较方便。 二、安装配置Srbac 在Yii的官方网站的Extensions中已经收录了Srbac插件&#x…

概念concept和requires ---C++ 20

概念concept和requires —C 20 concept concept简化了模板编程的难度 我们可以使用**concept定义模板形参的约束条件T** 模板实力替换T后必须满足std::is_integral_v<C>;为true 例子: requires关键字可以直接约束模板形参T 如下: template <class C> concept …

辞职中

不知道为什么就不想再做下去了&#xff0c;说不上来工作有什么好&#xff0c;当然也说不上来什么不好。SP这个行业&#xff0c;可能不太适合我。准备走了&#xff0c;考研还是继续找工作&#xff1f;我不知道该怎么走&#xff01;看着前面都是路却找不到一条适合自己的。转载于…

向DataGridView中添加新的一行数据,可以添加到最后一行或作为第一行

我的开发环境&#xff1a;Microsoft Visual Studio .net 2005 这个程序是Windows Forms Application 新建一个Windows Forms Application项目&#xff0c;打开Form1&#xff0c;在窗体上放一个DataGridView控件和Button,在DataGridView的Columns中添加两列&#xff0c;Name分别…

Linq学习

IEnumerable<DataRow> cbCurrent from dr in cbRows.AsEnumerable() where dr.Field<string>("ObjectNO").ToString() row["运输单号"].…

非类型模板参数(参考《C++ Templates 英文版第二版》)

非类型模板参数(参考《C Templates 英文版第二版》) Chapter 3 3.1 非类型类模板参数 与前几章的简单例子不同,你也可以通过std::array实例化一个固定大小的栈,这样做的优点在于内存管理, #include <array> #include <cassert>template<typename T, std::si…

I AM NOTHING vs I AM SOMETHING

女友推荐链接&#xff1a;BBS上一个女生的创业感言 自创业的一路艰辛 http://bbs.trendsmag.com/showthread.php?t163960

DataGridView添加一行数据、全选、取消全选、清空数据、删除选中行

.net 2005下的Windows Form Application,一个DataGridView控件和4个Button&#xff0c;界面设置如下&#xff1a; 代码如下&#xff0c;有注解&#xff0c;相信大家都看得明白&#xff1a; using System;using System.Collections.Generic;using System.ComponentModel;using S…

类型萃取类型检查 Type-Traits LibraryType Checks --- C++20

类型萃取:类型检查 Type-Traits Library:Type Checks — C20 Type-Traits library 在C11的时候就已经发布,但依然随着C版本在不断更新 类型检查 Type Checks 每种类型就是十四种主要类型之一 主要类型 template <class T> struct is_void; template <class T>…

转:如何在 LoadRunner 脚本中做关联 (Correlation)

如何在 LoadRunner 脚本中做关联 (Correlation) 当录制脚本时&#xff0c;VuGen会拦截client端&#xff08;浏览器&#xff09;与server端&#xff08;网站服务器&#xff09;之间的对话&#xff0c;并且通通记录下来&#xff0c;产生脚本。在VuGen的Recording Log中&#xff0…

开博碎语

结束了5月26号的软考&#xff0c;就萌生了建一个技术博客的想法-----技术或许太空泛&#xff0c;其实就是把工作中&#xff0c;学习上技术方面的一些资料&#xff0c;一些体会汇聚一起&#xff0c;呈现出来&#xff0c;博客当然是个不错的选择。baidu一下&#xff0c;技术博客为…

DateTime时间的比较问题

关于DateTime时间的比较问题&#xff0c;我现在不清楚使用> < 和DateTime.Compare(t1, t2)、t1.CompareTo(t2)的区别。 下面是一个简单的测试程序&#xff0c;至少到现在为止&#xff0c;我还没有发现这两种比较的区别之处&#xff0c;大家有任何自己的想法&#xff0c;…

模板元编程 Template Metaprogramming--- C++ 20

模板元编程(一) Template Metaprogramming— C 20 在编译期进行类型操作 举个例子: std::move在概念上应该这样实现(实际并不是这么做的): static_cast<std::remove_reference<decltype(arg)>::type&&>(arg);意义上,std::move首先获取它的参数arg,推断…

6月,启蒙篇

6月&#xff0c;哈哈 在过去的4月与5月里我一直放荡着自己&#xff0c;我发现一个人没有目标与理想后是这样的无耐 &#xff0c;也是这样的无所做为。在那两个月里我放弃了所有的程序&#xff0c;我只是在计算机前玩游戏 。我原本以为这样会过得开心点&#xff0c;会让自己放松…

JS 计算日期天数差

function dayDiffer(startDate,endDate){console.info((endDate.getTime - startDate.getTime())/(24*60*60*1000));return Math.floor((endDate.getTime() - startDate.getTime())/(24*60*60*1000)); }转载于:https://www.cnblogs.com/jsczljh/p/3647395.html