64,266
社区成员
发帖
与我相关
我的任务
分享
template<typename II1, typename F>
F for_each( II1 _ii1, II1 ii1_, F f )
{
while ( _ii1 != ii1_ )
{ f( *_ii1++ ); }
return f;
}
template<typename II1, typename II2, typename F>
F for_each( II1 _ii1, II1 ii1_, II2 _ii2, F f )
{
while ( _ii1 != ii1_ )
{ f( *_ii1++, *_ii2++ ); }
return f;
}
template<typename II1, typename II2, typename II3, typename F>
F for_each( II1 _ii1, II1 ii1_, II2 _ii2, II3 _ii3, F f )
{
while ( _ii1 != ii1_ )
{ f( *_ii1++, *_ii2++, *_ii3++ ); }
return f;
}
template<typename II1, typename II2, typename II3, typename II4, typename F>
F for_each( II1 _ii1, II1 ii1_, II2 _ii2, II3 _ii3, II4 _ii4, F f )
{
while ( _ii1 != ii1_ )
{ f( *_ii1++, *_ii2++, *_ii3++, *_ii4++ ); }
return f;
}
template<typename II1, typename... IIN, typename F>
F for_each( II1 _ii1, II1 ii1_, IIN... _iin, F f );
#include <iostream>
#include <iomanip>
#include <numeric>
#include <string>
#include <vector>
void pre_incr () { }
template <typename T, typename ... Ts>
void pre_incr (T& t, Ts& ... ts) { ++t; pre_incr(ts...); }
template <typename F, typename II1, typename ... IIs>
F for_each (F f, II1 _ii1, II1 ii1_, IIs ... _iis)
{
for (; _ii1 != ii1_; pre_incr(_ii1,_iis...))
{
f(*_ii1,*_iis...);
}
return f;
}
int main ()
{
std::string const string = "c++-template-programming";
std::vector<size_t> indices(string.size());
std::iota(indices.begin(),indices.end(),0);
::for_each([](size_t x, char c)
{ std::cout << std::setw(2) << x << " " << c << std::endl; },
indices.begin(),indices.end(),
string.begin());
return 0;
}