什么都可以成为C ++中for_each的第三个参数? 我读了它的一元函数,但我遇到的代码有一些类的对象作为第三个论点。
答案 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)
([a-zA-Z].*)
<强>参数强>
template<class InputIterator, class Function> Function for_each (InputIterator first, InputIterator last, Function fn);
,first
将迭代器输入到初始位置和最终位置 一个序列。使用的范围是last
,其中包含所有范围 first和last之间的元素,包括指向的元素 第一个但不是最后指向的元素。
[first,last)
一元功能 接受范围内的元素作为参数 这可以是函数指针或移动可构造函数对象 如果有的话,它的返回值将被忽略。