你好 以下材料的翻译是专门为
“ C ++开发人员”课程的学生准备的,该课程的课程将于6月27日开始。

去年11月在圣地亚哥举行的标准委员会会议上,C ++ 20采用了Ranges库。 该库提供用于处理旨在简化我们的代码的值范围的组件。 不幸的是,Ranges库没有很好的文档记录,这对于想要掌握它的人来说更难理解。 这篇文章旨在提供使用和不使用Ranges编写的代码示例。
此处提供
了 Eric Niebler的Ranges库实现。 它适用于Clang 3.6.2或更高版本,gcc 5.2或更高版本以及VC ++ 15.9或更高版本。 下面的代码示例已经使用最新版本的编译器进行编写和测试。 值得注意的是,这些示例是典型的实现,不一定是您可以想到的唯一解决方案。
尽管Ranges库的标准命名空间是
std::ranges
,但在当前的库实现中,它是
ranges::v3
。
以下示例中使用了以下名称空间别名:
namespace rs = ranges::v3; namespace rv = ranges::v3::view; namespace ra = ranges::v3::action;
另外,为简化起见,我们将引用以下对象,函数和lambda:
std::string to_roman(int value) { std::vector<std::pair<int, char const*>> roman { { 1000, "M" },{ 900, "CM" }, { 500, "D" },{ 400, "CD" }, { 100, "C" },{ 90, "XC" }, { 50, "L" },{ 40, "XL" }, { 10, "X" },{ 9, "IX" }, { 5, "V" },{ 4, "IV" }, { 1, "I" } }; std::string result; for (auto const & [d, r]: roman) { while (value >= d) { result += r; value -= d; } } return result; } std::vector<int> v{1,1,2,3,5,8,13,21,34}; auto print_elem = [](auto const e) {std::cout << e << '\n'; }; auto is_even = [](auto const i) {return i % 2 == 0; };
APDATE :我要感谢Eric Nibler和下面其他评论的人,并为这些代码示例提供了建议。 我根据他们的评论更新了一些。打印范围内的所有元素:
以相反的顺序打印范围的所有元素:
仅打印范围的偶数元素,但顺序相反:
跳过范围的前两个元素,仅打印以下三个元素中的偶数:
打印从101到200的数字:
打印从101到200的所有罗马数字。要将数字转换为相应的罗马数字,请使用上面显示的
to_roman()
函数。
以相反的顺序打印在[101,200]范围内被7整除的最后三个数字的罗马数字。
以相反的顺序创建一个字符串范围,该字符串包含后三个数字的罗马数字,它们是[101,200]范围中7的倍数。
更改未排序范围,使其仅保留唯一值,但顺序相反。
删除该范围的两个最小值和两个最大值,并将其余的顺序排列在第二个范围内。
将给定范围内的所有行合并为一个值。
计算文本中的单词数(以空格分隔)。
这篇文章对您有帮助吗? 在评论中写。