gpt4 book ai didi

c++ - rangesv3 ts 中的 "range"和 "view"有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 15:58:58 25 4
gpt4 key购买 nike

rangesv3 ts 中的“范围”和“ View ”有什么区别?

在 G 搜索中找不到任何类似的答案。我想我正在努力了解每个人应该做什么的基本概述:

范围“是一个” View 是否属于这种情况(在 C++ 中),反之亦然?

难道仅仅是 View 是只读范围吗?或者范围内的“元素”(当您取消引用迭代器时得到的)在一个中是 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.

一个 View 一个范围,只是有更多的限制。

TS 中更正式的定义在 RangeView 概念中。基本上,范围是可以迭代的东西, View 是半规则的范围 并且具有恒定时间复制/移动/分配/开始/结束/...

例如 std::vector<char>std::stringstd::string_view 都是范围,但只有最后一个也是 View 。


在 Ranges TS 中,View 总是半规则的,这个限制在 P1456 中放宽了。在 C++20 中, View 只需要默认可构造和 可移动。额外的语义约束(所有 操作都是常数时间)仍然成立。值得注意的是:虽然 View 不需要可复制,但如果它是可复制的,那么这些复制操作仍然需要花费常数时间。

P2325 中取消了默认构造限制,并在 P2415 中进一步放宽了其他要求。

关于c++ - rangesv3 ts 中的 "range"和 "view"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49077542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com