首页 > 其他分享 >std::for_each易忽略点

std::for_each易忽略点

时间:2023-09-03 11:00:31浏览次数:25  
标签:std InputIt UnaryFunction 忽略 v1 each first

  以下代码为修改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,InputIt,UnaryFunction,忽略,v1,each,first
From: https://www.cnblogs.com/ChebyshevTST/p/17674733.html

相关文章

  • msvc++中的预编译头文件pch.hpp和stdafx.h
    预编译头文件在VisualStudio中创建新项目时,会在项目中添加一个名为pch.h的“预编译标头文件”。(在VisualStudio2017及更高版本中,该文件名为stdafx.h)此文件的目的是加快生成过程。应在此处包含任何稳定的标头文件,例如标准库标头(如)。预编译标头仅在它或它包含的任何......
  • std模版库 队列、优先队列、双端队列
    queue为单端队列deque为双端队列priority_queue为优先队列includeincludepriority_queue<int,vector,less>//最大堆默认为对大堆也即和priority_queue等价priority_queue<int,vector,greater>//最小堆......
  • 千万不要忽略PCB设计中线宽线距的重要性
    想要做好PCB设计,除了整体的布线布局外,线宽线距的规则也非常重要,因为线宽线距决定着电路板的性能和稳定性。所以本篇以RK3588为例,详细为大家介绍一下PCB线宽线距的通用设计规则。要注意的是,布线之前须把软件默认设置选项设置好,并打开DRC检测开关。布线建议打开5mil格点,等长时可根......
  • 容易被忽略的它-终端盒
    光纤终端盒作为光缆线路的终端设备应具有4项基本功能。①固定功能:光缆进入机架后,对其外护套和加强芯要进行机械固定,加装地线保护部件,进行端头保护处理,可以将光纤进行分组和保护处理,让线路更加清晰和防止光纤断开。这样可以确保光纤终端盒的稳定性和安全性,同时也方便维护和更换损坏......
  • JSTL中forEach标签 varStatus属性值
    特性        Getter                     描述current   getCurrent()         当前这次迭代的(集合中的)项index      getIndex()              当前这次迭代从0开始的迭代索引count     getCount()......
  • 解决:docker 443: connect: network is unreachable
    1、配置镜像加速器您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器sudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<-'EOF'{"registry-mirrors":["https://liadaibh.mirror.aliyuncs.com"]}EOFsudosystemctldaemon-......
  • python+playwright 学习-76 playwright 忽略SSL 错误
    前言playwright设置ignore_https_errors参数忽略SSL错误context上下文中设置browser.new_context()创建上下文时fromplaywright.sync_apiimportsync_playwright,expectwithsync_playwright()asp:browser=p.chromium.launch(headless=False)conte......
  • C++11 右值引用&&、移动语义std::move、完美转发std::forward
    参考:https://blog.csdn.net/HR_Reborn/article/details/130363997 #pragmaonceclassArray{public:Array():size_(0),data_(nullptr){}Array(intsize):size_(size){data_=newint[size_];}//复制构造函数(深拷贝构造)A......
  • 关于自建Rustdesk 远程桌面服务器的公网访问:无法连接中继服务器的问题解决方法
    自建服务器位于内网时,内网客户端ID/中继的地址通常写成内网IP,外网客户端一般会用公网IP进行端口映射,但这样设置出现外网客户端无法连接中继服务器,但内网客户端使用正常的现象。经过半天的排查分析,当内网和外网填写的自定义服务器地址时,rust服务器无法识别出需要使用nat包的地址,默......
  • c++ stl std::sort使用例子
    classUser{public:int32_tm_fight_power;private:int32_tm_level;};boolCenterData::compare(constUser*left,constUser*right){if(left->m_fight_power!=right->m_fight_power){returnleft->m_fight_power>ri......