当前位置: 首页 > news >正文

网站建设总体上可划分为两个阶段企业管理咨询师考试

网站建设总体上可划分为两个阶段,企业管理咨询师考试,免费网页设计模板网站,合肥app建设公司STL库的ranges 在C STL标准库的ranges#xff08;C20中引入#xff09;中#xff0c;定义了一套全面的关于范围的概念、类、模板、函数以及其他相关组件#xff0c;旨在提高对元素序列的抽象化处理能力。主要包括以下几个方面#xff1a; 范围#xff08;Range…STL库的ranges 在C STL标准库的rangesC20中引入中定义了一套全面的关于范围的概念、类、模板、函数以及其他相关组件旨在提高对元素序列的抽象化处理能力。主要包括以下几个方面 范围Range定义了一系列标准要求规定了怎样的对象可被视为一个范围。视图Views提供了一系列轻量级、不可变且延迟计算的类模板及相关工具函数。范围友好算法Range-Algorithms对传统STL库的算法进行了升级和扩展使其可以直接作用于范围对象并能充分利用视图的特性提高了算法的灵活性和效率。辅助工具一些工具函数使得对范围的操作更为便捷。 范围ranges 范围Range是一个可以被迭代遍历的对象它可以是标准容器如vector、list、原生数组、字符串或者任何能够提供迭代器接口的数据结构。在Ranges中一个范围不仅仅包括元素序列还定义了如何访问这些元素的规则。它指向一系列元素从概念上看类似于一对begin与end迭代器。 范围概念 范围由概念concept定义。概念concept是C语言的一个核心特性它正式引入于C20标准。与类定义不同概念定义描述了一组行为特征而不用关心具体的类型。这意味着只要一个对象具有期望的行为如特定的成员变量或方法或者让作为参数能让某段代码编译通过就可以在代码中当作符合某种约定的对象来处理而无需关心对象的确切类型。 引入范围概念让处理序列数据的代码与承载序列数据的具体容器实现无关两者解耦。这也是“鸭子类型”的编程范式。 concept代表的编程范式也被称为鸭子类型Duck Typing这个概念源自一句俗语“如果它走路像鸭子、叫声像鸭子那么它就是鸭子。” 动态类型语言中广泛使用鸭子类型编程范式例如Ruby、Python。而在静态类型语言C中通过引入Concept机制也巧妙借鉴了这一灵活处理对象特性的方法论。 STL的ranges定义了std::ranges::range概念concept凡是符合range概念的对象都可以被当作范围对象。从代码定义上看凡是能从中得到begin和end两个迭代器的对象都可以看作范围。如下代码所示 std::ranges::range代码定义 template class T concept range requires( T t ) {ranges::begin(t); // equality-preserving for forward iteratorsranges::end (t); };范围是个大范畴除了std::ranges::range定义了基本的范围概念外ranges命名空间里还定义了特殊的范围概念形成一个类似于类继承的树形关系结构。根据支持迭代器的不同一部分范围概念定义可以组成这样的树形结构。 range |- view |- common_range |- sized_range |- output_range |- input_range|- forward_range|- bidirectional_range|- random_access_range|- contiguous_range 以sized_range为例这个概念定义 “符合range概念并可以作为参数执行size(x)” 的东西均属于此概念。 _EXPORT_STD template class _Rngconcept sized_range range_Rng requires(_Rng __r) { _RANGES size(__r); };借用范围 borrowed range 借用范围是一种比较重要的概念是指不会因为迭代而被消耗的数据序列例如引用原始数据的视图或者引用类型的容器。借用范围生命周期结束后其迭代器仍然有效。 概念borrowed_range判断一个类型是否为借用范围borrowed range定义如下 templateclass _Range concept borrowed_range range_Range (is_lvalue_reference_v_Range || enable_borrowed_rangeremove_cvref_t_Range);// 由模板特化指定为true。 template class inline constexpr bool enable_borrowed_range false; 如果要创建一个符合borrowed_range概念的类首先这个类型要满足range概念的要求其次需要特化enable_borrowed_range以满足enable_borrowed_range的要求。 视图views 视图views是一种轻量级的范围它不会存储元素而是对其他范围进行变换、过滤等操作的结果。视图是惰性求值的这意味着操作直到真正需要结果时才会执行这有助于提升效率。视图能够对范围对象进行各种转换、筛选和聚合等运算有以下特点 不拥有数据 与数据的拥有权解耦即视图处理数据但不拥有数据因此不必管资源的申请和释放同时也不会修改底层数据。 不复制数据 通常不需要在内存中分配新的数据结构而是通过引用或转换现有的数据进行操作这意味着运算中通常产生较少的的额外开销。 惰性计算Lazy Evaluation 惰性计算就是“按需计算”即它们只在需要时才会执行。这意味着当你创建一个视图时不会立即对底层数据进行任何计算只有在实际使用时才会触发计算。这种延迟计算的特性可以节省内存和计算资源尤其是在处理大型数据集的场景中。 函数式编程与链式风格 视图本身符合范围概念的要求因此一个视图可以作为另一个视图的输入且基于视图的函数性、不可变性和无副作用性这样就支持了函数式编程范式。辅以管道运算符“|”可以实现漂亮的链式编程风格。 常用视图 关于视图相关的内容定义在std::ranges::views名字空间中包含但不限于以下内容 filter创建一个仅包含符合特定条件的元素的视图。transform对每个元素应用给定的转换函数并生成一个新的视图。take创建一个包含指定数量元素的视图。drop创建一个去除指定数量元素后的视图。split将范围分割成指定大小的子范围序列。reverse反转范围中的元素顺序。join将范围的范围中的子范围连接成单个范围。elements从范围中的元组中选择指定索引的元素并将其表示为一个范围。 std::views是对std::ranges::views的简写它是通过一个命名空间别名实现的旨在简化代码的书写。 namespace views ranges::views;管道运算符 视图的使用最好配合管道运算符。管道运算符就是位或运算符|的重定义用法就像Unix的管道命令可以将视图像管道一样连接起来实现类似于Java Stream API的流式数据处理管道。 下面是一个简单的例子 #include iostream #include ranges #include vectorint main() {// 创建一个整数向量std::vectorint numbers { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };// 使用std::views::filter过滤出所有偶数将其值增加一倍再取前三个值。auto result_view numbers| std::views::filter([](int i) { return i % 2 0; })| std::views::transform([](int i) { return i * 2; })| std::views::take(3);for (int number : result_view) {std::cout number ;}return 0; }注意std::views::take(3)意味着只取前三个结果因为视图是惰性计算的因此程序并不会处理numbers的所有元素。并且整个处理过程看不到中间变量也没有构建用于存放中间结果的容器。此处可以看到视图的非常明显的价值 节约内存和计算资源代码风格清晰紧凑可读性强几乎没有副作用产生bug的几率少 范围适配器 视图也被称为“范围适配器”Range adapters就像电源适配器例如交流转直流220V转110V一样它们是作用在范围之上的对其数据做转换的“适配器”通过提供动态的、可组合的数据处理管道使得C程序员能够以声明式、函数式的方式处理数据而无需关注底层实现细节从而极大地增强了代码的表达力和效率。 范围友好算法 引入ranges之后STL中的很多算法原先algorithm模块中的函数被改写并放到了std::ranges命名空间中为了兼容性跟原先的std命名空间中的算法函数并存这些新的算法接受一个range作为参数而不是原来的begin和end两个参数例如std::ranges::sort(range)。 以下是常用的一些范围友好算法 条件判断 ranges::all_ofranges::any_ofranges::none_of 遍历处理 ranges::for_each ranges::for_each_n 转换 ranges::transformranges::reverse 生成 ranges::fillranges::generateranges::iota 查找比较 ranges::count ranges::count_ifranges::find ranges::find_ifranges::starts_with ranges::ends_withranges::containsranges::search 复制搬运 ranges::copy ranges::copy_ifranges::move 排序和半排序 ranges::is_sortedranges::sort ranges::stable_sortranges::partial_sort ranges::nth_element 分区 ranges::is_partition ranges::partition 二分查找 ranges::lower_bound ranges::upper_boundranges::binary_search 集合运算 - 提供集合数据结构相关的操作 ranges::mergeranges::includeranges::set_difference ranges::set_intersection ranges::set_union 集合的求差集、交集、并集运算 堆运算 - 提供堆数据结构相关的操作 ranges::is_heap ranges::make_heapranges::push_heap ranges::pop_heap ranges::sort_heap 入队、出堆与堆排序 心得体会 C引入了概念concept提供了更高层级的抽象ranges是基于概念的把抽象推广至广泛的场景。基于range的算法有更好的通用型。程序员使用自己专门设计的容器可能是为了自己特定应用场景而做了特别的优化与ranges互动复用ranges提供的内容减少自己的工作量。 std::ranges::views和管道运算符提供了一种现代化的、更加直观的方式来处理序列操作使代码更简洁易读。 总之使用ranges可以让代码更加现代化、简洁和高效提高开发效率并减少错误的可能性。
http://www.pierceye.com/news/993818/

相关文章:

  • 购物网站建设特色沈阳公司网站制作
  • seo网站编辑是做什么的微博seo排名优化
  • 南通网站建设方案托管关键词优化排名首页
  • 哈尔滨全员核酸检测福建整站优化
  • 电子商务网站建设汉狮辽宁移动网站
  • 厂西建设厅网站网站流量依赖率
  • 手机能看的网站企业网站开发市场
  • 企业建设网站的过程世界各大网站搜索引擎提交入口
  • 网站建设云南做静态网站成本
  • 超低价的锦州网站建设网站开发有哪些软件有哪些
  • 中英文网站后台photoshop做网站
  • 优秀网站开发公司软件开发工具与环境实践报告
  • 茂名网站开发网站关键词优化步骤
  • 介绍家乡的网站怎么做天眼查企业查询公司
  • 公司网站建设代理一般做多久苏州关键词优化企业
  • 北京网站网站建设vps做网站怎么加速
  • 销售网站怎么做一个公司可以做多少网站
  • 西安旅游攻略必去景点网站优化成都哪里好
  • 网站特色泉州做网站优化价格
  • 小米官方网站开发版在哪里推进门户网站建设 用好用活
  • 玉器企业网站源码软件商店哪个好用
  • 学校网站建设的安全策略江苏太平洋建设集团官方网站
  • 织梦做中英文企业网站给特宝网站商家网址怎样做
  • 网站邮箱接口怎么设置WordPress国外主机
  • 西安做网站的公司哪家好怎么样查询网站被挂黑链
  • 卯兔科技网站建设河南旅游集团 网站建设
  • 重庆网站建设c做食品网站的素材
  • 网站如何制作的简单的管理系统有哪些
  • 职高网站建设知识点一个人开发一个网站需要多久
  • c 做的网站怎么上传博客 选择 WordPress