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

怎么快速做网站文章在线葡京在线葡京

怎么快速做网站文章,在线葡京在线葡京,濮阳信息港,网站浏览器兼容性问题文章目录 引言ranges::iota定义与功能使用场景代码示例 ranges::shift_left定义与功能使用场景代码示例 ranges::shift_right定义与功能使用场景代码示例 总结 引言 C23作为C编程语言的一个重要版本,为开发者带来了许多新的特性和改进。其中,ranges::io…

文章目录

    • 引言
    • `ranges::iota`
      • 定义与功能
      • 使用场景
      • 代码示例
    • `ranges::shift_left`
      • 定义与功能
      • 使用场景
      • 代码示例
    • `ranges::shift_right`
      • 定义与功能
      • 使用场景
      • 代码示例
    • 总结

引言

C++23作为C++编程语言的一个重要版本,为开发者带来了许多新的特性和改进。其中,ranges::iotaranges::shift_leftranges::shift_right这三个无约束算法的范围化版本(P2440R1)为处理序列数据提供了更加便捷和高效的方式。本文将详细介绍这三个算法的定义、功能、使用场景以及代码示例。

ranges::iota

定义与功能

ranges::iotastd::iota的范围化版本,它在C++11中就已经存在,而在C++23中得到了进一步的扩展和优化。std::iota函数定义在<numeric>头文件中,用于将一个连续递增的值填充到指定的范围[first, last)中,起始值为value,并重复执行++value操作。其函数原型如下:

#include <numeric>
template < class ForwardIt, class T >
void iota( ForwardIt first, ForwardIt last, T value );
(since C++11)
(constexpr since C++20)

ranges::iota的功能与之类似,但它更符合现代C++的范围编程范式,能够更方便地与其他范围算法和视图结合使用。

使用场景

ranges::iota常用于初始化数组或容器,为其赋予连续递增的值。例如,我们可以使用它来初始化一个包含连续整数的向量:

#include <iostream>
#include <vector>
#include <numeric>
#include <ranges>int main() {std::vector<int> vec(10);std::ranges::iota(vec, 1);for (auto num : vec) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

在上述代码中,std::ranges::iota(vec, 1)将从1开始的连续整数填充到vec向量中。

代码示例

以下是一个更复杂的示例,展示了如何使用ranges::iota与其他范围视图结合:

#include <iostream>
#include <ranges>
#include <algorithm>int main() {auto numbers = std::views::iota(1, 11);auto squared = numbers | std::views::transform([](int x) { return x * x; });std::ranges::for_each(squared, [](int x) { std::cout << x << " "; });std::cout << std::endl;return 0;
}

在这个示例中,std::views::iota(1, 11)生成了一个从1到10的整数范围,然后使用std::views::transform视图将每个数平方,最后使用std::ranges::for_each遍历并输出结果。

ranges::shift_left

定义与功能

ranges::shift_left是一个用于将范围中的元素向左移动指定位置的算法。它定义在<algorithm>头文件中,函数原型如下:

#include <algorithm>
template< std::permutable I, std::sentinel_for<I> S >
constexpr ranges::subrange<I>shift_left( I first, S last, std::iter_difference_t<I> n ); (1) (since C++23)
template< ranges::forward_range R >
requires std::permutable<ranges::iterator_t<R>>
constexpr ranges::borrowed_subrange_t<R>shift_left( R&& r, ranges::range_difference_t<R> n ); (2) (since C++23)

该算法将范围[first, last)r中的元素向左移动n个位置。如果n == 0 || n >= last - first,则没有任何效果;如果n < 0,行为是未定义的。否则,对于[0, last - first - n)中的每个整数i,将原本位于位置first + n + i的元素移动到位置first + i

使用场景

ranges::shift_left常用于需要对序列进行循环移位的场景,例如在处理环形缓冲区或循环队列时。

代码示例

#include <iostream>
#include <vector>
#include <algorithm>
#include <ranges>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};int shiftAmount = 2;std::ranges::shift_left(numbers, shiftAmount);for (const auto& number : numbers) {std::cout << number << " ";}std::cout << std::endl;return 0;
}

在这个示例中,std::ranges::shift_left(numbers, 2)numbers向量中的元素向左移动了2个位置。

ranges::shift_right

定义与功能

ranges::shift_rightranges::shift_left相反,它用于将范围中的元素向右移动指定位置。其函数原型如下:

#include <algorithm>
template< std::permutable I, std::sentinel_for<I> S >
constexpr ranges::subrange<I>shift_right( I first, S last, std::iter_difference_t<I> n ); (3) (since C++23)
template< ranges::forward_range R >
requires std::permutable<ranges::iterator_t<R>>
constexpr ranges::borrowed_subrange_t<R>shift_right( R&& r, ranges::range_difference_t<R> n ); (4) (since C++23)

该算法将范围[first, last)r中的元素向右移动n个位置。如果n == 0 || n >= last - first,则没有任何效果;如果n < 0,行为是未定义的。否则,对于[0, last - first - n)中的每个整数i,将原本位于位置first + i的元素移动到位置first + n + i

使用场景

ranges::shift_right同样适用于需要对序列进行循环移位的场景,只是方向相反。

代码示例

#include <iostream>
#include <vector>
#include <ranges>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};std::ranges::shift_right(numbers, 2);for (const auto& number : numbers) {std::cout << number << " ";}std::cout << std::endl;return 0;
}

在这个示例中,std::ranges::shift_right(numbers, 2)numbers向量中的元素向右移动了2个位置。

总结

C++23中的ranges::iotaranges::shift_leftranges::shift_right这三个无约束算法的范围化版本为开发者提供了更加强大、便捷和高效的序列处理能力。它们不仅简化了代码的编写,还提高了代码的可读性和可维护性。通过合理使用这些算法,我们可以更加轻松地处理各种序列数据,提升程序的性能和质量。

http://www.dtcms.com/wzjs/499447.html

相关文章:

  • 利用博客做网站排名百度一下官方下载安装
  • 有那些网站做食品供应链的呢自动点击竞价广告软件
  • 青海建设厅网站尚少岩电脑培训学校网站
  • 保定网站制作策划百度小说排行榜2020
  • 行业门户网站设计整站seo免费咨询
  • 自建团队网站开发要多少钱seo优化步骤
  • 网站设计怎么做视频深圳市网络seo推广平台
  • 民宿网站建设河北seo网络优化培训
  • 网站开发合同答案优化大师是什么软件
  • 网站做境外第三方支付南京seo网络推广
  • 网站建设广告宣传素材网站排名优化培训课程
  • 怎样建立一个免费的网站企业邮箱注册
  • 网站规划设计说明书恩城seo的网站
  • 建设银行集团网站中国万网官网登录
  • 网站关键词优化排名怎么做网站一键生成
  • 汉中做网站公司苏州百度
  • 想注册一个做网站的公司好外包公司排名
  • perl php 网站开发青岛seo青岛黑八网络最强
  • 做网站泊头新平台推广
  • 政府部门网站建设工作总结百度推广怎么做最好
  • 基础建设的网站有哪些安卓优化大师下载
  • 做设计的靠谱兼职网站有哪些怎么把平台推广出去
  • 电子商务网站建设实验报告设计外包网站
  • 长沙专业做网站公司如何分析百度指数
  • web记事本做网站怎么改变字的颜色在百度怎么免费发布广告
  • vuejs做视频网站百度推广竞价排名技巧
  • 石油大学网页设计与网站建设企业内训
  • 浦江县城乡建设局网站如何自己做网络推广
  • 怎样突破网站设计瓶颈百度销售岗位怎么样
  • 网站制作主要公司大数据营销推广精准粉