|
先看个Group1中的一个算法“对每个(for_each)”,有三个参数,两个输入迭代器,一个函数对象。这个操作的意思是对[first, last)的每个元素都做一个Function操作:
template <class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function f) {
while (first != last) f(*first++);
return f;
}
下面给一个使用for_each的例子:
template <class T>
class sum_up
{
public:
void operator() (const T& value) { sum += value; }
const T& read_sum() { return sum; }
private:
static T sum;
};
int sum_up<int>::sum = 0;
void main()
{
deque<int> d(3, 2); // 两个元素:3 3
sum_up<int> s;
for_each(d.begin(), d.end(), s);
cout << s.read_sum();
}
输出结果:6。注意到这里用到了函数对象sum_up,它定义了operator。所以函数对象是STL中一个非常重要的概念,屡屡用到。
Group1中还有其他的操作,如“寻找(Find)”、“邻居寻找(Adjacent find)”、“计数(Count)”、“不匹配(Mismatch)”、“相等(Equal)”、“搜索(Search)”等。(责任编辑:admin) |
