为什么 for_each 不能修改其函子参数?

2023-11-23

http://www.cplusplus.com/reference/algorithm/for_each/
一元函数取一个元素 范围作为参数。这可以 是一个指向函数或 其类重载的对象 操作员()。它的返回值,如果有的话, 被忽略。

根据这篇文章,我预计 for_each 实际上会修改作为其第三个参数给出的对象,但似乎 for_each 对临时对象进行操作,甚至不修改给出的对象。

那么,为什么要这样实施呢?看起来用处要小得多。或者我是否误解了某些内容并且下面的代码包含错误?

#include <iostream>
#include <vector>
#include <algorithm>

template <class T> struct Multiplicator{
    T mresult;
  public:
    const T& result() const{return mresult;}
    Multiplicator(T init_result = 1){
      mresult = init_result;
    }
    void operator()(T element){
      mresult *= element;
      std::cout << element << " "; // debug print
    }
};

int main()
{
    std::vector<double> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    Multiplicator<double> multiply;
    std::for_each(vec.begin(),vec.end(),multiply);
    std::cout << "\nResult: " << multiply.result() << std::endl;
    return 0;
}

预期输出:

1 2 3 Result: 6

但得到以下输出:

1 2 3 Result: 1

函数对象按值获取。for_each返回函数对象,因此如果将其更改为:

multiply = std::for_each(vec.begin(),vec.end(),multiply);

你得到了预期的输出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 for_each 不能修改其函子参数? 的相关文章

随机推荐

  • C 中 EOF 问题

    我正在编写一个程序 该程序应该读取两个可以包含换行符和各种其他字符的字符串 因此 我使用 EOF Ctrl Z 或 Ctrl D 来结束字符串 这对于第一个变量来说效果很好 但是对于第二个变量来说 这似乎是有问题的 因为显然有东西卡在输入缓
  • Git 删除重复提交

    经过一番使用遥控器后 我的所有提交最终都增加了一倍 例如 代替 C3107 C3 C2 C1 I got C3107 C3107 C3 C3 C2 C2 C1 C1 其中双重提交具有相同的名称但不同的哈希值 问题是我注意到它太晚了 而且我没
  • Android Studio(海豚 | 2021.3.1)和(电鳗 | 2022.1.1)不显示布局预览

    我正在使用 Android Studio Dolphin 2021 3 1 电鳗 2022年1月1日 Android studio 更新后花栗鼠 2021 2 1 至 Android Studio Dolphin 2021 3 1 我的所有
  • MPI_Reduce 是阻塞(还是天然屏障)?

    我有下面的 C 代码片段 它基本上使用经典的蒙特卡罗技术计算 pi srand48 unsigned time 0 my rank for int i 0 i lt part points i double x drand48 double
  • 用于单元测试的备用 SLF4J 绑定或配置?

    我希望能够将用于单元测试的 SLF4J 绑定切换到简单版本 但似乎没有简单的方法来配置它 基本上 我构建的项目记录到一个文件 我希望在单元测试时它是控制台 我之前使用过 antrun maven 插件对 persistence xml 文件
  • 用于检查锁定文件的应用程序的 PowerShell 脚本?

    在 PowerShell 中使用 如何检查应用程序是否锁定文件 我喜欢检查哪个进程 应用程序正在使用该文件 以便我可以关闭它 您可以使用SysInternals工具handle exe 尝试这样的事情 PS gt handleOut han
  • 为什么shortValue()方法是具体的,而intValue()方法是抽象到java.lang.Number中的?

    我已经阅读了源代码java lang Number我想知道为什么 intValue longValue floatValue doubleValue 是抽象的但是 shortValue byteValue 混凝土 源代码 public ab
  • OpenCart 中基于路由向页面添加 CSS 样式表

    我正在为客户端商店使用 opencart 版本 1 5 1 3 1 并且想知道对其进行编码的最佳方法是什么 以便我可以为某些路线添加某些样式表 例如 在我的类别页面上 我希望有一个与默认样式不同的样式表 或者一个将使用我的自定义表覆盖默认样
  • 当可观察数组为空时如何显示无数据?

    我是 Knockout js 的新手 我正在尝试将数据从可观察数组显示到table 我遇到的问题是它生成两个tbody标签 但是如果我将空检查逻辑移入foreach 循环 No Data确实出现了 有没有更好的方法来使用表来做到这一点 我不
  • 如何将 Servlet 重定向到给定的 URL

    目前 我正在使用 request getRequestDispatcher thePage html forward request response 在我的 servlet 中向用户显示新页面 但 servlet 的 URL 保留在浏览器
  • 如何将以前版本的 Python 安装到 virtualenv 中? [复制]

    这个问题在这里已经有答案了 我在全局安装了Python3 然后创建了一个virtualenv 现在我想把里面的python版本改成Python2 7 尝试安装Python2 7时我只能选择安装到我的硬盘上 如何指定 virtualenv 中
  • Nhibernate 标准:“选择 max(id)...”

    我可以使用 Criteria 执行 t sql 命令来选择表中列的最大值吗 从客户中选择 cus id max id 1 Ta Ollie Use 投影 session CreateCriteria typeof Customer SetP
  • 实例作为静态类属性

    是否可以在 PHP 中将类的实例声明为属性 基本上我想要实现的是 abstract class ClassA static property new ClassB 好吧 我知道我不能这样做 但是除了总是做这样的事情之外还有什么解决方法吗 i
  • Reactjs 可以以编程方式处理 :before 吗?

    我必须以某种方式以编程方式设置宽度 before for a div div div 我如何定义someStyle这样的宽度 before of something div可以相应改变吗 是的 您可以通过编程方式更改 React 中的 be
  • 如何使用 Indy 10 和 OpenSSL 通过 HTTPS 下载文件?

    我有以下任务 使用 HTTPS 和身份验证下载文件 Indy 似乎是可行的方法 但由于某种原因它到目前为止还不起作用 我已做好以下准备 我用于下载的 TIdHTTP 组件 用于创建 URL 的 TIdURI 组件 应提供安全连接的 TIdS
  • 如何针对多个验证组进行验证?

    我有两个验证组 父组和子组 我有一个添加按钮 只需验证子验证组 这很容易完成 保存按钮需要针对客户端和服务器端的父验证组和子验证组进行验证 我想我知道如何通过为每个组调用 Page Validate groupname 方法来在服务器端完成
  • 使用 C# 中的 .Pem/.Pkcs8 密钥文件中的 MD5WithRSA 对数据进行签名

    我有以下 Java 代码示例 我需要在 C 中重新制定它 PKCS8EncodedKeySpec privKeySpec new PKCS8EncodedKeySpec pkcs8PrivateKey KeyFactory keyFacto
  • clang 和 gcc 之间 const 引用三元运算符的地址差异

    我对这里发生的事情有一个模糊的想法 这与this但我想知道为什么 clang 和 g 处理这个问题的方式不同 这里未定义的行为在哪里 注意 这与模板无关 我只是使用它们来使示例更加紧 凑 这都是关于类型的whatever include
  • 实用程序类是邪恶的吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我看到这个问题 如果 实用程序 类是邪恶的 我该将通用代码放在哪里 我想 为什么实用程序类是邪恶的 假设我有一个深度为数十个类的领域模型 我需要能够对实例进行 xml 化 我是否在父级上创
  • 为什么 for_each 不能修改其函子参数?

    http www cplusplus com reference algorithm for each 一元函数取一个元素 范围作为参数 这可以 是一个指向函数或 其类重载的对象 操作员 它的返回值 如果有的话 被忽略 根据这篇文章 我预计