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

时间:2018-04-06 01:45:49

标签: c++ standards language-design range-v3 c++-experimental

来自ranges-v3的文档:

  

view::all

     

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

令我困惑的是:

  1. view::all使用的情况下?
  2. 标准容器(std::vectorstd::list等)不是 概念范围?
  3. 例如:

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

    version 1version 2之间有什么区别吗?

1 个答案:

答案 0 :(得分:12)

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

  

view::all

     

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

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