stl与仿函数与lambda

STL里的有些容器和算法可以传入自定义的函数对象(仿函数),运用这个特点来简化我们的程序。

实现

  1. 定义一个vector并初始化,输出vector中的所有元素。
  2. 将vector中所有元素乘2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
template<typename T>
using myvec = vector<T>


myvec<int> fuck{1,2,3,4,5};
for(auto& elem : fuck)
cout<<elem<<" ";
for(auto& elem : fuck)
elem*=2;

//运用class
template<typename T>
class
{
public:
void operator()(T x)
{
cout<<x<<" ";
}
};
template<typename T>
class multishit
{
T multinum;
public:
multishit(T _multinum):multinum(_multinum){}
void operator()(T& elem)
{
elem*=2;
}
};
//运用struct
template<typename T>
struct
{
void operator()(T x)
{
cout<<x<<" ";
}
};
template<typename T>
struct multishit
{
T multinum;
multishit(T _multinum):multinum(_multinum){}
void operator()(T& elem)
{
elem*=2;
}
};
myvec<int> fuck{1,2,3,4,5};
for_each(fuck.begin(),fuck.end(),printshit<int>());
for_each(fuck.begin(),fuck.end(),multishit<int>(2));//class和struct调用相同


//运用lambda
myvec<int> bitch{1,2,3,4,5};
for_each(bitch.begin(),bitch.end(),[](int& x)
{
cout<<x<<" ";
});
for_each(bitch.begin(),bitch.end(),[](int& x)
{
x*=2;
});