You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:25:00