容器在概念上一定是一个范围吗?

Is a container sure to be a range conceptually?

来自 ranges-v3 的文档:

view::all

Return a range containing all the elements in the source. Useful for converting containers to ranges.

让我困惑的是:

  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 1version 2有区别吗?

天哪,自从 range-v3 切换术语以来,文档的那部分内容还没有更新。是的,容器是一个范围(它有 begin()end(),return 和 iterator/sentinel 对)。它不是视图(具有 O(1) copy/move 的范围)。因此,view::all 的文档应为:

view::all

Return a View containing all the elements in the source. Useful for converting containers to Views.

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