请问怎么用for_each算法遍历以下的嵌套容器。(最好有代码)

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

void test01()
{
    vector<vector<int>> v;

    vector<int> v1;
    vector<int> v2;
    vector<int> v3;
    vector<int> v4;

    for (int i = 0; i < 4; i++)
    {
        v1.push_back(i + 1);
        v2.push_back(i + 2);
        v3.push_back(i + 3);
        v4.push_back(i + 4);
    }

    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);
    v.push_back(v4);

    //常规方法
    /*for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
    {
        for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
        {
            cout<<*vit<<" ";
        }
        cout<<endl;
    }*/

}

int main()
{
    test01();
}

代码如下:请参考 

#include<iostream>
#include<vector>
#include<algorithm>
#include <algorithm>
using namespace std;


void fun2(int i)
{
	cout << i << " ";
}

void fun(vector<int> i)
{
	for_each(i.begin(), i.end(), fun2);
	cout << endl;
}

void test01()
{
	vector<vector<int>> v;

	vector<int> v1;
	vector<int> v2;
	vector<int> v3;
	vector<int> v4;

	for (int i = 0; i < 4; i++)
	{
		v1.push_back(i + 1);
		v2.push_back(i + 2);
		v3.push_back(i + 3);
		v4.push_back(i + 4);
	}

	v.push_back(v1);
	v.push_back(v2);
	v.push_back(v3);
	v.push_back(v4);

	//常规方法
	/*for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
	{
		for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
		{
			cout<<*vit<<" ";
		}
		cout<<endl;
	}*/

	for_each(v.begin(), v.end(), fun);
}

int main()
{
	test01();
}