std :: transform和std :: plus如何协同工作?

米哈赞

我正在阅读C ++参考,并通过示例遇到了std :: plus函数。这很简单,只需添加lhs和rhs。代码是:

#include <functional>
#include <iostream>

int main()
{
   std::string a = "Hello ";
   const char* b = "world";
   std::cout << std::plus<>{}(a, b) << '\n';
}

输出:Hello world

我将其更改为

#include <functional>
#include <iostream>

int main()
{
   int a = 5;
   int b = 1;
   std::cout << std::plus<int>{}(a, b) << '\n';
}

输出:6

现在我做了

foo vector = 10 20 30 40 50
bar vector = 11 21 31 41 51

我打了电话:

std::transform (foo.begin(), foo.end(), bar.begin(), foo.begin(), std::plus<int>());

它给出了21 41 61 81 101,据我了解它是将foo和bar加起来。但是如何将其传递给std :: plus函数?

布赖恩·罗德里格斯(Brian Rodriguez)

std::plus<>是一个函子,对于一个实现的类来说只是花哨的演讲operator()这是一个例子:

struct plus {
    template <typename A, typename B>
    auto operator()(const A& a, const B& b) const { return a + b; }
};

std::transform你那里大约相当于:

template<typename InputIt1, typename InputIt2, 
         typename OutputIt, typename BinaryOperation>
OutputIt transform(InputIt1 first1, InputIt1 last1, InputIt2 first2, 
                   OutputIt d_first, BinaryOperation binary_op)
{
    while (first1 != last1) {
        *d_first++ = binary_op(*first1++, *first2++);
    }
    return d_first;
}

在这里,binary_op是给的名字std::plus<>由于std::plus<>是函子,因此C ++会将对它的“调用”解释为对operator()函数的调用,从而为我们提供了所需的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使SSRS和Chrome协同工作?

来自分类Dev

函数和列表如何协同工作?

来自分类Dev

如何正确使用std :: transform和std :: mem_fn?

来自分类Dev

如何使flexbox,transitions和IE10协同工作?

来自分类Dev

如何使大礼包,滑轨和liqpay协同工作?

来自分类Dev

autofs和WebDAV-如何使它们协同工作?

来自分类Dev

如何使这种稀疏矩阵和Trie协同工作

来自分类Dev

.match 和捕获组如何协同工作?

来自分类Dev

ChrootDirectory 和用户的主目录如何协同工作?

来自分类Dev

Context Locals 和 The Request Context 如何协同工作?

来自分类Dev

dateadd、datetime 和 datediff 如何协同工作?

来自分类Dev

使Spark,Python和MongoDB协同工作

来自分类Dev

使Viewbox和ScrollViewer协同工作

来自分类Dev

使Viewbox和ScrollViewer协同工作

来自分类Dev

Angular 4 和 Umbraco 协同工作

来自分类Dev

CSS和jQuery-如何强制2条规则协同工作

来自分类Dev

Android的新工具栏和上下文操作栏如何协同工作?

来自分类Dev

QSplitter,QWidget调整大小,setSizes(),setStretchFactor()和sizeHint()-如何使其全部协同工作?

来自分类Dev

OAuth和自定义Django用户模型如何协同工作?

来自分类Dev

CSS和jQuery-如何强制2条规则协同工作

来自分类Dev

NSTableView-如何使自动和手动排序协同工作?

来自分类Dev

概念性问题:React Native、Apollo、Node 和 GraphQL 如何协同工作?

来自分类Dev

对 SMB (1.0) 和映射 I/O 如何协同工作感到困惑

来自分类Dev

如何使用 AJAX、PHP 和 MySQL 使过滤器协同工作

来自分类Dev

一般问:XAMPP 和 MySQL 数据库如何协同工作?

来自分类Dev

mulw、prodl 和 prodh 在汇编程序中如何协同工作?

来自分类Dev

如何使用std :: transform进行计算

来自分类Dev

boost :: transform与std :: transform

来自分类Dev

使工作队列和RPC协同工作

Related 相关文章

  1. 1

    如何使SSRS和Chrome协同工作?

  2. 2

    函数和列表如何协同工作?

  3. 3

    如何正确使用std :: transform和std :: mem_fn?

  4. 4

    如何使flexbox,transitions和IE10协同工作?

  5. 5

    如何使大礼包,滑轨和liqpay协同工作?

  6. 6

    autofs和WebDAV-如何使它们协同工作?

  7. 7

    如何使这种稀疏矩阵和Trie协同工作

  8. 8

    .match 和捕获组如何协同工作?

  9. 9

    ChrootDirectory 和用户的主目录如何协同工作?

  10. 10

    Context Locals 和 The Request Context 如何协同工作?

  11. 11

    dateadd、datetime 和 datediff 如何协同工作?

  12. 12

    使Spark,Python和MongoDB协同工作

  13. 13

    使Viewbox和ScrollViewer协同工作

  14. 14

    使Viewbox和ScrollViewer协同工作

  15. 15

    Angular 4 和 Umbraco 协同工作

  16. 16

    CSS和jQuery-如何强制2条规则协同工作

  17. 17

    Android的新工具栏和上下文操作栏如何协同工作?

  18. 18

    QSplitter,QWidget调整大小,setSizes(),setStretchFactor()和sizeHint()-如何使其全部协同工作?

  19. 19

    OAuth和自定义Django用户模型如何协同工作?

  20. 20

    CSS和jQuery-如何强制2条规则协同工作

  21. 21

    NSTableView-如何使自动和手动排序协同工作?

  22. 22

    概念性问题:React Native、Apollo、Node 和 GraphQL 如何协同工作?

  23. 23

    对 SMB (1.0) 和映射 I/O 如何协同工作感到困惑

  24. 24

    如何使用 AJAX、PHP 和 MySQL 使过滤器协同工作

  25. 25

    一般问:XAMPP 和 MySQL 数据库如何协同工作?

  26. 26

    mulw、prodl 和 prodh 在汇编程序中如何协同工作?

  27. 27

    如何使用std :: transform进行计算

  28. 28

    boost :: transform与std :: transform

  29. 29

    使工作队列和RPC协同工作

热门标签

归档