以下代码为修改vector内部的每一个元素,使其每个元素大小变为原来的平方。

    std::vector v1{1, 2, 4, 2};

    std::for_each(begin(v1), end(v1), [](auto& n) {
return n * n;
}); for (const auto& item : v1)
std::cout << item << ' ';

但是输出结果依旧是1,2,4,2。

在cppreference官网for_each的描述中,有这么一段话:

  For both overloads, if the iterator type (InputIt/ForwardIt) is mutable, f may modify the elements of the range through the dereferenced iterator. If f returns a result, the result is ignored.

也就是说,有返回值的函数是会被忽略掉的,所以就造成了上面的结果。

另外一方面,可以看到for_each的实现:

template<class InputIt, class UnaryFunction>
constexpr UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f)
{
for (; first != last; ++first)
f(*first); return f; // implicit move since C++11
}

若f是有返回值的函数(可以结合最上面的demo来看),其返回了n的平方而没有实质对n做修改操作,所以最终结果也没有发生变化。

std::for_each易忽略点的更多相关文章

  1. cplusplus系列>algorithm>std::for_each

    http://www.cplusplus.com/reference/algorithm/for_each/ 对一个序列应用函数.可以是函数指针,或者是functor. // for_each exa ...

  2. 【英语】Bingo口语笔记(70) - 最易忽略的2个连读技巧

  3. 单选按钮易忽略的Group属性

    Group就其意思就是一组的意思.就是说用于选择多个控件组合,选了TRUE后,你就可以为这组新建一个变量.把一组控件当一个控件来使用.例如多个单选按钮用group属性,这样你就可以用一个变量来管理这些 ...

  4. strcpy和strcat易忽略点

    首先来看一段C程序: #include <stdio.h> #include <string.h> #include <stdlib.h> void GetMem( ...

  5. html&css 易忽略的知识点

    1.input标签的readonly属性 <input type="text" readonly="readonly"/>

  6. CSS中易忽略的点

    一.使用斜杠/分割的关键字 1.font H2{ font:12px/100% sans-serif; } 分割的分别是 字体大小 与 行高 ,其他关键是用空白符分割. 2.background di ...

  7. mysql 易忽略点

  8. php 易忽略问题

  9. js中的函数易忽略的点小节

    1.Function()属性和方法 属性: prototype 2.Function对象实例属性和方法 实例属性:(例如var Function=function(x,y,z){}; myFuncti ...

  10. MySQL不常用、易忽略的小知识

    笔者从事开发也有一段时间了,关于数据库方面的一些小知识在这里总结一下 1.count(*),count(1)与count(column)区别 count(*)对行的数目进行计算,包含NULL coun ...

随机推荐

  1. 【LeetCode.384打乱数组】Knuth洗牌算法详解

    前两天看网易面筋得知网易云的随机歌曲播放使用了这个算法,遂找题来做做学习一下 打乱数组 https://leetcode.cn/problems/shuffle-an-array/ 给你一个整数数组 ...

  2. 精选Golang高频面试题和答案汇总

    大家好,我是阳哥. 之前写的< GO必知必会面试题汇总>,已经阅读破万,收藏230+. 也欢迎大家收藏.转发本文. 这篇文章给大家整理了17道Go语言高频面试题和答案详解,每道题都给出了代 ...

  3. Github入门教程(新版)

    GitHub 的介绍与使用 GitHub 注册一个账号 直接在首页注册即可啦 要注意的是 第一项 username 别人是可见的 后面修改也会比较麻烦,所以起个好名字很重要 个人主页介绍 刚注册好的页 ...

  4. snmptt解析中文trap消息

    项目中使用了中国电信系统集成公司的虚拟化平台,为通过zabbix监控,接收HyperCenter发送的告警,需要将trap消息中的汉语编码转译.网络上snmptt资料不多,官网文档也不甚友好,通过参考 ...

  5. java volatile是如何保证可见性的?

    lock前缀指令干的事. volatile 修饰的变量在进行写操作时会多出一条如下的汇编指令: lock addl $0x0,(%esp) volatile就是靠这个lock前缀指令去实现可见性的,当 ...

  6. 文件上传的multipart/form-data属性,你理解了吗

    form表单经常用于前端发送请求,比如:用户填写信息.选择数据.上传文件,对于不同的场景,上传数据的格式也会有些区别. action action 表示该请求的 url 地址,定义在form上,请求的 ...

  7. async、await其实是generator和promise的语法糖

    async 关键字用于声明异步函数,await 用于在async函数中将异步代码变为同步,阻塞代码的执行 对于promise和generator不熟悉的朋友可以移步看看这些文章 Promise的理解与 ...

  8. 【技术积累】Linux中的命令行【理论篇】【九】

    blkid命令 命令介绍 blkid命令是一个用于查看块设备属性的Linux命令.它可以识别和显示块设备的文件系统类型.UUID.LABEL.PARTUUID等信息. 命令说明 在Linux下可以使用 ...

  9. Java中锁的简单使用体验

    锁是控制多个线程访问共享资源的一种同步机制. synchronized:可以将代码块或方法设置为同步. ReentrantLock:提供了比synchronized更广泛的锁操作函数. ReadWri ...

  10. 4.2 C++ Boost 内存池管理库

    Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量.可移植.高效的C应用程序.Boost库可以作为标准C库的后备,通常被称为准标准 ...