なんだかよく分からないstd::for_each

いまさらながら、C++のstd::vectorの使い方を調べるなど。動的配列ということは分かったし、イテレータの使い方も分かったけど、std::for_eachを使った回し方はなんかよく分からない。ここまでトリッキーなことをして、どういうご利益があるのかな?

#include <stdio.h>
#include <vector>
#include <algorithm>

// intのベクター(動的配列)
typedef std::vector<int> VECTOR;

// 関数オブジェクト
class PrintInt
{
public:
    // ()演算子の実装
    void operator()(int num)
    {
        printf("PrintInt %d\n",num);
    }
};

int main(void)
{
    VECTOR v;
    for(int i = 0; i < 10; ++i )
    {
        // ベクターの末尾に要素を追加する
        v.push_back( i * 10 );
    }

    // ふつうに配列の添え字を回す
    for(int i = 0; i < v.size(); i++ )
    {
        printf("v[%d] = %d\n", i, v[i]);
    }

    // イテレータで回す
    for(VECTOR::iterator it=v.begin(); it!=v.end(); it++)
    {
        printf("*it = %d, it++\n", *it);
    }

    // std::for_eachで回す ...なんだかよく分からない
    std::for_each(v.begin(), v.end(), PrintInt());

    getchar();
    return 0;
}