gpt4 book ai didi

c++ - C++20 范围的切片 View

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:23 24 4
gpt4 key购买 nike

Python 的 itertools 具有 islice(seq, start, stop, step) 过程,它接受一个序列并返回每个 step 的迭代器startstop 之间序列值的第 th 个值。

C++20 的 Ranges 库是否提供类似的功能,例如像 slice 这样的函数,它采用随机访问迭代器 start、标记 stop 和步长值 step,并返回一个随机访问迭代器,该迭代器迭代 startstop 之间的每个 stepth 值?

如果没有,是否可以使用 Ranges 库提供的原语来实现这样的迭代器适配器?

(我知道如何手动实现这样的适配器,所以这不是问题。)

最佳答案

不完全是。

C++20 将有 view::iota它给你一个从起始值到哨兵的序列。但是,它没有跨步功能。它只会递增(通过 ++)。

但是,您可以将它与 range-v3's 结合使用view::stride添加步骤。即:

auto evens = view::iota(0, 100) | view::stride(2); // [0, 2, 4, 6, ... ]

对于现有范围,有 view::slice,它也不会大步前进。但这些是正交的并且很好地分层:

auto even_teens  = view::iota(0, 100)
| view::slice(10, 20)
| view::stride(2); // [10, 12, 14, 16, 18]

关于c++ - C++20 范围的切片 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56638475/

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