13

见:http ://eel.is/c++draft/#ranges

给定两个长度相等的 C++2a 范围(如在符合范围库的范围概念的对象中)a 和 b,有没有办法将它们压缩在一起,这样:

for (const auto& [a,b] : zip(a,b))

你期望什么?也就是说,它返回一个具有可解构绑定对的范围:

(a.begin(), b.begin())
(a.begin()+1, b.begin()+1)
(a.begin()+2, b.begin()+2)
...
(a.end()-1, b.end()-1)
4

2 回答 2

11

如您所见,zip_view目前在 C++20 中没有(在撰写本文时)。

它是在P1035R4中提出的(以及一些其他适配器),其先前版本在圣地亚哥受到好评,并且似乎很有可能在 C++20 中着陆。关于代理引用有一些悬而未决的问题,但我认为这不是特定于zip.


那些关于代理引用的问题最终导致zip从 P1035 中删除,并且没有被 C++20 采用。相反,zip正在提议将 C++23 作为P2321的一部分(其中还包括对我提到的代理引用更改种类的描述)。

于 2019-02-15T21:18:34.743 回答
0

范围 v3 niebler 已经公开了一个带有惰性 zip 和一些更通用形式的库,还有 zip_view 和其他形式。实现为仅标头库,因此您可以阅读代码。有一些很好的使用例子。在 c++ 中,当被询问时,zip 可能会返回一个元组。并索引到该元组将为您提供值。

于 2019-02-15T21:54:21.597 回答