2024/01/28
904
Ranges 是C++20 提供的一套对范围的统一抽象和操作库。ranges 指可迭代的序列,它可以包括任何能够提供迭代器的数据结构, 如 vector, list, etc. 引入 ranges 可以使迭代的处理更简洁直观灵活。
我们知道 STL algorithms 利用迭代器对数据进行操作。比如我们需要对一个 vector 进行排序, 需要将排序的范围的迭代器做为参数传递给 sort()
方法:
1 2 3 |
std::vector v = {1,6,4,2,8}; std::sort(v.begin(), v.end()); std::sort(v.begin(), v.end(), std::greater()); |
这种写法很灵活。但更多的时候,我们是想对整个 vector 进行排序,传入迭代器反而是多余的操作了。引入 Ranges 即可简化这一操作。
1 2 |
std::ranges::sort(v); std::ranges::sort(v,std::greater()); |
在 ranges 库中,默认是对整个范围进行操作。当然,也可以像原来一样,使用迭代器来指定范围:
1 |
std::ranges::sort(v.begin(), v.end()); |
这是一种简化操作的方式。但 ranges 更重要的优势在于,它允许你以函数式编程的方式来操作 STL algorithm 。