例程
#include <vector>
#include <iostream>
#include <algorithm>
int add5(int &n)
{
int re = n + 5;
std::cout << re << " ";
return n + 5;
}
class addClass
{
const int m_a;
public:
addClass(int _a) : m_a(_a)
{}
void operator()(int _val) const
{
_val += m_a;
std::cout << _val << " ";
}
};
int main()
{
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
std::vector<int> vec(std::begin(a), std::end(a));
// 不改變 vec
// 函數
std::for_each(vec.begin(), vec.end(), add5);
std::cout << std::endl;
// 類
std::for_each(vec.begin(), vec.end(), addClass(6));
std::cout << std::endl;
// lambda表達式
std::vector<int> A(std::begin(a), std::end(a));
std::vector<int> B(std::begin(a), std::end(a));
std::for_each(vec.begin(), vec.end(), [&A, &B](int i) {
A[i] = B[i] + 5;
std::cout << "A["<<i<<"]=" <<A[i] << " ";
});
std::cout << std::endl;
// show vec
for (auto sub : vec)
std::cout << sub << " ";
std::cout << std::endl;
// 改變vec
std::for_each(vec.begin(), vec.end(), [&vec](int i) {
vec[i] += 10;
});
// show vec
for (auto sub:vec)
std::cout << sub<< " " ;
std::cout<<std::endl;
return 0;
}
運行結果:
5 6 7 8 9 10 11 12 13 14
6 7 8 9 10 11 12 13 14 15
A[0]=5 A[1]=6 A[2]=7 A[3]=8 A[4]=9 A[5]=10 A[6]=11 A[7]=12 A[8]=13 A[9]=14
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19