August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
标准库算法终于要用概念(参见第7章)来说明了。这方面的最初工作可在范围技术规范[RangesTS]中找到。现在,在网上已经能找到这类C++实现。其中,概念定义在<experimental/ranges>中,但有希望在C++20中添加到名字空间std中。
Range是C++98中序列的推广,后者由begin()/end()对定义。Range是一个概念,它指出它接受的应该是一个元素序列,可以有几种定义方式:
·一对迭代器{begin,end}。
·一个{begin,n}对,其中begin是一个迭代器,n为元素数目。
·一个{begin,pred}对,其中begin是一个迭代器,pred是一个谓词。若pred(p)对于迭代器p为true,表明到达了序列尾。这令我们可以表达无限序列和动态生成的序列。
Range概念令我们可以使用sort(v)而不是sort(v.begin(),v.end()),后者是自1994年以来我们使用STL不得不采用的语法。例如:
用于Sortable的默认关系运算为less。
除了Range,范围技术规范还提供了很多有用的概念。这些概念定义在<experimental/ranges/concepts>中。更准确的定义请参考[RangesTS]。 ...
Read now
Unlock full access