什么都可以成为C ++中for_each的第三个论点?

时间:2015-08-04 12:29:03

标签: c++

什么都可以成为C ++中for_each的第三个参数? 我读了它的一元函数,但我遇到的代码有一些类的对象作为第三个论点。

2 个答案:

答案 0 :(得分:3)

第三个参数可以是一个函数对象,它是一个可以在函数调用的后缀表达式中使用的对象。

来自C ++标准(20.9函数对象)

  

1函数对象类型是可以是类型的对象类型(3.9)   函数调用中的postfix-expression(5.2.2,13.3.1.1).231 A.   function对象是函数对象类型的对象。在这些地方   人们期望将指向函数的指针传递给   算法模板(第25条),指定接口接受   一个功能对象。 这不仅使算法模板有效   指向函数的指针,但也使它们可以使用   任意函数对象

这是一个例子

#include <iostream>
#include <algorithm>

int main()
{
    const size_t N = 10;
    int a[N] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    struct A
    {
        void operator()( int x ) const { std::cout << x << ' '; }
    };

    std::for_each( a, a + N, A() );
    std::cout << std::endl;
}    

程序输出

0 1 2 3 4 5 6 7 8 9

这是A()类型的临时对象struct A是一个函数对象,因为它可以在函数调用的后缀表达式中使用,因为函数调用运算符in struct A的定义。

例如,你可以写

std::cout << A()( a[0] ) std::endl;

A obj;
std::cout << obj( a[0] ) std::endl;

如您所见,表达式obj( a[0] )看起来像是一个函数调用。

答案 1 :(得分:0)

来自cplusplus.com

([a-zA-Z].*)
     

<强>参数

     

template<class InputIterator, class Function> Function for_each (InputIterator first, InputIterator last, Function fn);first
  将迭代器输入到初始位置和最终位置   一个序列。使用的范围是last,其中包含所有范围   first和last之间的元素,包括指向的元素   第一个但不是最后指向的元素。

     

[first,last)
  一元功能   接受范围内的元素作为参数   这可以是函数指针或移动可构造函数对象   如果有的话,它的返回值将被忽略。