std::views::take_while 是 C++20 范围库的惰性适配器,从范围开头持续取元素直至首次遇到不满足谓词的元素即停止,返回不修改原容器的视图,仅截断前缀,不进行过滤。

std::views::take_while 是什么,它不改变原容器
std::views::take_while 是 C++20 范围库(Ranges)提供的一个适配器,作用是从一个范围开头开始,**持续取元素直到首次遇到不满足谓词的元素为止**,之后立即停止——包括那个不满足条件的元素本身也不会被包含。它返回的是一个视图(std::ranges::take_while_view),不拷贝数据,也不修改原容器,纯惰性求值。
常见误用是以为它“过滤”或“筛选”,其实它只做前缀截断:一旦条件失败就停,不管后面还有没有满足条件的元素。
- 它要求传入的范围支持
begin()和end(),且谓词必须可调用、接受单个参数、返回bool - 对空范围或首元素就不满足条件的情况,结果为空视图
- 不能用于输入范围(如
std::istream_view),因为无法回退——take_while内部需要 peek 下一个元素来判断是否终止
怎么写谓词?lambda 最常用,但要注意引用捕获陷阱
谓词通常用 lambda 表达,比如从 vector 中取小于 10 的连续前缀:
[threshold=10]
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











