std::for_each

`std::for_each` 是 C++ STL 中的标准函数之一,用于对指定的容器或序列中的元素执行指定的操作。该函数的头文件为 `<algorithm>`,定义在 `namespace std` 中,因此需要包含该头文件才能使用该函数。

`std::for_each` 函数是 C++ STL 中自 C++98 就开始提供的函数,因此在 C++98/03、C++11、C++14 等版本中都可用。由于 `std::for_each` 很常用,其定义已经稳定,因此在 C++17、C++20 等新版本中依然继续保留并使用。

需要注意的是,C++14 和 C++17 都对 `std::for_each` 进行过更改,新增了一个返回值,用于返回执行完毕后的第三个参数的值。因此,在使用 `for_each` 函数时,需要确保自己所用的 C++ 版本,以保证代码的正确性。

for_each第三个参数是迭代器问题

问题

按照常理,map的迭代器应该就是std::map<T1,T2>::iterator,但是为什么下面的代码时错误的。

复制代码
for_each(m_m.begin(),m_m.end(),[](std::map<int,int>::iterator iter){
        std::cout<<iter->second<<std::endl;
	});

vector也一样:

复制代码
for_each(v.begin(),v.end(),[](std::vector<int>::iterator iter){
		std::cout<<*iter<<std::endl;
	});

原因

for_each的第三个参数是一个函数指针,而for_each内部实现是:

1,获取迭代器的值;

2,将这个值以值传递的方式传递给for_each的第三个参数。

复制代码
//for_each()的实现如下
template <typename Iterator, typename Operation>
    Operation for_each (Iterator beg, Iterator end, Operation op)
    {
        while(beg != end)
        {
            op(*beg);
            ++beg;
        }
        return op;
    }

代码来源

相关推荐
nvvas13 分钟前
Java 入门(四):数组——数据的集合管理
java·开发语言
钓鱼的肝16 分钟前
csp-j-s总结(2)
c++·经验分享·笔记·算法·青少年编程
重生的黑客32 分钟前
Qt 常用控件精讲(1):QWidget 核心属性全解 —— 从 geometry 到 qrc 与 QSS
c++·qt·qwidget·qss·常用控件
Lambert28140 分钟前
AgentScope Java 从零(07):官方有权限引擎,我却在工具里写了个 if
java·后端·ai编程
Hespethorn1 小时前
取 `X-Forwarded-For` 首段做频控 key,等于把限流开关交给了调用方
c++
米糕闯编程1 小时前
鱼香ros2(七)功能包组织C++节点
c++·ros2·cmakelists
Kyrie_kk1 小时前
Java--ThreadLocal线程副本(一)
java·后端
Y3815326621 小时前
SERP 数据清洗实战:字段标准化、日期解析与去重键
开发语言·数据库·python·python数据库
汉克老师1 小时前
GESP2026年9月认证C++四级( 第三部分编程题(1、新汉诺塔))精讲
c++·gesp·小学生·学c++编程
君顾11 小时前
本地城市低空经济管理系统定制:城市级低空运营平台架构与落地实战
java·开发语言·飞手