问题 容器肯定是概念上的范围吗?


从文档中 范围-V3

view::all 

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

让我困惑的是:

  1. 在什么情况下 view::all 用过的?
  2. 是标准容器(std::vectorstd::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


6683
2018-04-06 01:45


起源

范围不是一个概念。这是一个类模板。 - Jive Dadson
不,范围是一个概念。 - Eric Niebler


答案:


Egad,自range-v3切换术语以来,该部分文档尚未更新。是的,一个容器是一个范围(它有 begin() 和 end() 返回迭代器/ sentinel对)。它不是视图(具有O(1)复制/移动的范围)。所以,文档 view::all 应该读:

view::all

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

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


12
2018-04-06 18:22