rangesv3 ts 中的 "range" 和 "view" 有什么区别?
What's the difference between a "range" and a "view" in the rangesv3 ts?
rangesv3 ts 中的 "range" 和 "view" 有什么区别?
在 G 搜索中未找到任何类似的答案。我想我正在努力了解每个人应该做什么的基本概述:
'is-a' 视图范围是这种情况(用 c++ 来说),还是反之亦然?
难道仅仅是视图是只读范围?或者也许范围内的 "elements"(当你取消引用迭代器时得到的)在一个中是 const 而在另一个中不是?
谢谢!
来自文档,a range is:
A range can be loosely thought of a pair of iterators, although they need not be implemented that way.
和:
A view is a lightweight wrapper that presents a view of an underlying sequence of elements in some custom way without mutating or copying it. Views are cheap to create and copy, and have non-owning reference semantics.
视图是一个范围,只是有更多的限制。
TS 中更正式的定义在 Range and View 概念中。基本上,范围是可以迭代的东西,视图是半规则的范围†并且具有常数时间copy/move/assignment/begin/end/...
比如std::vector<char>
、std::string
、std::string_view
都是范围,只有最后一个也是视图
† 虽然在 Ranges TS 中,View 始终是半规则的,但在 P1456 中放宽了此限制。在 C++20 中,视图只需要 默认可构造和 ‡ 可移动。额外的语义约束(所有‡ 操作都是常数时间)仍然成立。值得注意的是:虽然一个 View 不需要是可复制的,但如果它是可复制的,那么那些复制操作仍然需要花费常数时间。
‡在 P2325 and other requirements were further relaxed in P2415.
取消了默认构造限制
rangesv3 ts 中的 "range" 和 "view" 有什么区别?
在 G 搜索中未找到任何类似的答案。我想我正在努力了解每个人应该做什么的基本概述:
'is-a' 视图范围是这种情况(用 c++ 来说),还是反之亦然?
难道仅仅是视图是只读范围?或者也许范围内的 "elements"(当你取消引用迭代器时得到的)在一个中是 const 而在另一个中不是?
谢谢!
来自文档,a range is:
A range can be loosely thought of a pair of iterators, although they need not be implemented that way.
和:
A view is a lightweight wrapper that presents a view of an underlying sequence of elements in some custom way without mutating or copying it. Views are cheap to create and copy, and have non-owning reference semantics.
视图是一个范围,只是有更多的限制。
TS 中更正式的定义在 Range and View 概念中。基本上,范围是可以迭代的东西,视图是半规则的范围†并且具有常数时间copy/move/assignment/begin/end/...
比如std::vector<char>
、std::string
、std::string_view
都是范围,只有最后一个也是视图
† 虽然在 Ranges TS 中,View 始终是半规则的,但在 P1456 中放宽了此限制。在 C++20 中,视图只需要 默认可构造和 ‡ 可移动。额外的语义约束(所有‡ 操作都是常数时间)仍然成立。值得注意的是:虽然一个 View 不需要是可复制的,但如果它是可复制的,那么那些复制操作仍然需要花费常数时间。
‡在 P2325 and other requirements were further relaxed in P2415.
取消了默认构造限制