13

range-v3的文档中:

view::all

返回包含源中所有元素的范围。用于将容器转换为范围。

让我感到困惑的是:

  1. 在什么场景下view::all使用?
  2. 标准容器(std::vector,std::list等)在概念上不是范围吗?

例如:

auto coll = std::vector{ 1, 2, 2, 3 };  
view::all(coll) | view::unique; // version 1
coll | view::unique; // version 2

version 1和有什么区别version 2吗?

4

1 回答 1

14

例如,自 range-v3 切换术语以来,该部分文档尚未更新。是的,一个容器是一个范围(它有begin()并且end()返回一个迭代器/哨兵对)。它不是视图(具有 O(1) 复制/移动的范围)。因此,文档view::all应为:

view::all

返回一个包含源中所有元素的视图。用于将容器转换为视图。

要回答您的第二个问题,您的代码中版本 1 和版本 2 之间没有区别。

于 2018-04-06T18:22:39.650 回答