如何用STL查找夹在256和257之间的[0,256)子区间
用STL实现指定子区间的查找
完全可以用STL算法实现这个需求,替代手写循环后代码会更简洁、可读性更强。核心思路是结合std::find定位关键元素,用std::all_of验证中间元素的合法性,具体实现如下:
实现步骤
- 遍历数组,用
std::find逐个定位值为256的元素 - 对每个256的位置,从下一个元素开始用
std::find找第一个257 - 用
std::all_of检查这两个位置之间的所有元素是否都属于[0,256)区间 - 若满足条件,记录或输出该子区间
代码示例
#include <vector> #include <algorithm> #include <iostream> int main() { std::vector<int> arr = {256, 10, 200, 257, 50, 256, 300, 257, 256, 257}; auto current = arr.begin(); // 循环查找所有256的位置 while ((current = std::find(current, arr.end(), 256)) != arr.end()) { auto sub_start = current; ++current; // 从256的下一个元素开始寻找257 auto sub_end = std::find(current, arr.end(), 257); if (sub_end == arr.end()) { ++current; continue; } // 验证中间元素是否全部在[0,256)范围内 bool is_valid = std::all_of(current, sub_end, [](int num) { return num >= 0 && num < 256; }); if (is_valid) { // 输出子区间内容 std::cout << "符合条件的子区间:"; for (auto it = sub_start; it != std::next(sub_end); ++it) { std::cout << *it << " "; } std::cout << "\n"; } ++current; // 移动到下一个位置,避免重复处理同一个256 } return 0; }
关键说明
std::find替代了手写的循环查找逻辑,代码更简洁且经过标准库优化std::all_of批量验证元素合法性,省去了手动遍历判断的冗余代码- 迭代器的移动逻辑确保不会遗漏或重复处理任何可能的起始点
内容的提问来源于stack exchange,提问作者Peter Featherstone
相关产品推荐
相关产品推荐

