Ranges-v3使用ranges::views::counted(1)出现函数匹配错误如何解决
问题原因与解决方案
1. 编译报错的直接原因
你对ranges::views::counted的调用方式不符合接口要求:该视图的作用是从指定迭代器开始截取固定长度的区间,需要传入「起始迭代器 + 截取长度」两个入参,不支持在管道中仅传入一个长度参数调用,这就是你看到no match for call报错的原因。
2. 正确实现方式
你的需求是从处理后的区间头部截取1个元素,直接使用ranges::views::take(1)替换ranges::views::counted(1)即可,take视图专门用于从区间头部截取指定个数的元素,完全适配管道调用语法。
修改后的代码片段如下:
auto pivots = timestamped_h | views::reverse | views::remove_if(remove_candle) | ranges::views::take(1);
3. 逻辑验证
以你给出的测试用例为例:
- 目标时间
target_tp = tp + 17min,减1个周期(5min)得到12min,计算周期起点为10min remove_if会过滤掉所有时间戳大于等于10min的元素,剩余元素为时间戳0min到7min的条目- 反转后取第一个元素即为原序列中小于周期起点的最大时间(7min)对应的h值1.0,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

