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

是否有C++ STL函数可处理相邻元素i与i+1?

用STL算法替代相邻元素遍历循环

当然可以用STL算法替代这段代码,不仅能提升可读性,还能规避原代码里的潜在边界问题。

原代码的核心逻辑是:遍历容器中的每一对相邻元素(第i个与第i+1个),调用doSomething函数。下面是不同C++版本下的STL实现方案:

C++11及以上版本

结合std::for_each和迭代器实现,无需手动维护索引:

#include <algorithm>

// 先判断容器非空,避免空容器时的迭代器操作错误
if (!listOfItems.empty()) {
    auto prev_it = listOfItems.begin();
    std::for_each(std::next(prev_it), listOfItems.end(), [&](int current_val) {
        doSomething(*prev_it, current_val);
        ++prev_it;
    });
}

C++20及以上版本

利用C++20范围库的std::views::adjacent,直接生成相邻元素对,代码更简洁直观:

#include <ranges>
#include <algorithm>

std::ranges::for_each(std::views::adjacent<2>(listOfItems), [](const auto& elem_pair) {
    doSomething(elem_pair.first, elem_pair.second);
});

这些方案的优势

  • 可读性更强:代码直接表达“处理相邻元素对”的意图,无需读者解析索引逻辑
  • 安全性更高:原代码在容器为空时,listOfItems.size()-1会因无符号整数溢出变为极大值,导致循环越界;STL方案要么提前判断空容器,要么范围视图自动处理空容器场景,避免错误
  • 更符合STL范式:使用迭代器/范围的标准写法,减少手动索引的冗余代码

内容的提问来源于stack exchange,提问作者Gurushant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:15:52