你能用新的范围库压缩吗?
Can you zip with the new ranges library?
参见:http://eel.is/c++draft/#ranges
给定两个 C++2a 范围(如在符合范围库的范围概念的对象中)a 和 b,长度相等,有没有办法将它们压缩在一起,这样:
for (const auto& [a,b] : zip(a,b))
符合您的期望吗?也就是说,它 returns 具有可解构绑定对的范围:
(a.begin(), b.begin())
(a.begin()+1, b.begin()+1)
(a.begin()+2, b.begin()+2)
...
(a.end()-1, b.end()-1)
如您所见,C++20 中目前没有 zip_view
(截至撰写本文时)。
它是在 P1035R4 中提出的(连同其他一些适配器),它的前一个版本在圣地亚哥受到好评并且看起来很有可能登陆 C+ +20。有关于代理引用的未决问题,但我不认为这是特定于 zip
.
那些关于代理引用的问题最终导致 zip
从 P1035 中删除,并且它没有被 C++20 采用。相反,zip
作为 P2321 的一部分被提议用于 C++23(其中还包括对我提到的代理引用更改类型的描述)。
ranges v3
niebler 已经制作了 public 一个带有惰性 zip 和一些更通用形式的库 zip_view 和其他。作为仅 header 库实现,因此您可以阅读代码。有一些很好的使用示例。
在 c++ zip 中,当被询问时可能 return 一个元组。并索引到该元组将为您提供值。
参见:http://eel.is/c++draft/#ranges
给定两个 C++2a 范围(如在符合范围库的范围概念的对象中)a 和 b,长度相等,有没有办法将它们压缩在一起,这样:
for (const auto& [a,b] : zip(a,b))
符合您的期望吗?也就是说,它 returns 具有可解构绑定对的范围:
(a.begin(), b.begin())
(a.begin()+1, b.begin()+1)
(a.begin()+2, b.begin()+2)
...
(a.end()-1, b.end()-1)
如您所见,C++20 中目前没有 zip_view
(截至撰写本文时)。
它是在 P1035R4 中提出的(连同其他一些适配器),它的前一个版本在圣地亚哥受到好评并且看起来很有可能登陆 C+ +20。有关于代理引用的未决问题,但我不认为这是特定于 zip
.
那些关于代理引用的问题最终导致 zip
从 P1035 中删除,并且它没有被 C++20 采用。相反,zip
作为 P2321 的一部分被提议用于 C++23(其中还包括对我提到的代理引用更改类型的描述)。
ranges v3 niebler 已经制作了 public 一个带有惰性 zip 和一些更通用形式的库 zip_view 和其他。作为仅 header 库实现,因此您可以阅读代码。有一些很好的使用示例。 在 c++ zip 中,当被询问时可能 return 一个元组。并索引到该元组将为您提供值。