????C++???м???????????????????????lambda??????bind????????????????????????÷?????
?????. ????
????????????????????βΣ???Σ????????????????????????...????Щ????????????????????ò???????????????????????????CSAPP???????Щ???????????????C++11???Щ??????????????
????????βκ?????
????C++11??????????????βΣ???????????????????????????????????????????????????????????
????1. ???????initializer_list???????????????????????????壩??
????std::initializer_list<T>{ };
????????????б??????????г??????T???????????????initializer_list?????????????????????????????????????????????????????μ?list?????????list??????????????
????2. ????????????βΣ????C???????????ú?????????printf??scanf??Щ??????????????
????void print(int?? ...);
?????????β????????????????????C????????????Щ??????????????????varargs??????C???????
?????????????????????????????βΣ??????????????????????????C++??C??e汾???????????C++????????????????????????????е??
?????????
1 #include <stdarg.h>
2 void method(int i?? ...)
3 {
4     int v;
5     va_list params;//???????????б?
6     va_start(params?? i); //???????????????????????????????
7     do {
8         v = va_arg(params?? int); //????????б??л???????????????int
9         printf("%d"?? v);
10     } while (v != 0);
11     va_end(params);
12 }
13
14 void format(const char* format?? ...)
15 {
16     char buf[1024];va_list params;
17     va_start(params?? format);
18     vsnprintf_s(buf?? 1024?? 1024?? format?? params);
19     va_end(params);
20     printf("%s"?? buf);
21 }
?????????????????????????????
???????C++????????????????????????????????????????????????????????????????????????????????????C++11??????б??????????
????C++??????????飬??????????????????????饗??????????????????
????typedef int arr[10];//typedef????
????using Arr = int[10];//?????÷?
????Arr *func0(int i);
????int(*func1(int i))[10];
????auto func2(int i) -> int(*)[10];
????????C++????????β?÷????????
1 //β?÷????????????????????????????????????
2 int odd[] = { 1??3??5??7??9 };
3 int even[] = { 0??2??4??6??8 };
4
5 decltype(odd) *arrPtr(int i)
6 {
7     return (i % 2) ? &odd : &even;
8 }
????C++??????????????????????main????????????????????????????????β??б???????????????????????????????const??????????????λ?????????????????????????????????????????const????????????const??????????????????????????????????????????????????????????????????????????????
1 const std::string &shortString(const std::string &s1?? const std::string &s2)
2 {
3     return s1.size() <= s2.size() ? s1 : s2;
4 }
5 std::string &shortString(std::string &s1?? std::string &s2)
6 {
7     auto &r = shortString(const_cast<const std::string &>(s1)??
8         const_cast<const std::string &>(s2));//????????shortSring?????const_cast
9                                              //?????????s1??s2?????????汾????????????????????????汾???е???????μ?????
10     return const_cast<std::string &>(r);
11 }
????const_cast????????????????????const_cast????????????const???????const??????????δ????????????
???????????????Σ????????????????βο?????????????????????βΣ???????????????βζ??????????βΣ?????β??????????????????????????Σ?????????п????????????????????????????????????????βε??β????????βΣ????????????????????????????????βε??primer 5e??????????
1 size_t wd = 80;char def = ' ';
2 size_t ht();
3 string screen(size_t = ht()?? size_t = wd?? char = def);
4 string window = screen();//????screen(ht()?? 80 ' ')
5
6 void f2()
7 {
8     def = '*';
9     size_t wd = 100;
10     window = screen();//????screen(ht()?? 80 '*')
11 }
??????????????constexpr?????????????????????????????????????????????????????????????С?????????????????????????????????????????????????????????????У?????inline??????????????????????????????????iniline??????
????????constexpr?????????????C++11?????????????????????constexpr?????????????????????????β????????????????????????????????????????return??????constexpr??????з??????????constexpr???????????????????constexpr???????????????????????Щ???????κβ??????????????????п??????????????????
????1 constexpr size_t scale(size_t cnt)
????2 {
????3     using test = int;
????4     return cnt * 2;
????5 }
????????C++????constexpr????????????????????????constexpr????????β???????????????????????п???????????????
????int t;
????int arr[scale(100)];
????auto ret = scale(t);
????scale(100)????????????????????????scale(t)???????size_t?????
??????????????constexpr????????÷??????????棬??????????constexpr????????????????????????????????constexpr??????????ζ????????????ζ???????????£???????????????constexpr????????????????????
?????????????????????????C++?????????????????????????????????????????飬?????????????????β?????????????????????????????????????????ν??????
???????????????????β???????????????????δ???????????????????????????????????????????????const??????????????????const??????????const??????????????????汾??????汾??????????????????????÷?????汾???????????????????????汾???????ó????汾?????????
???????const???????
????????????????????????????????????????
???????????????????????????????
???????????????????????????
??????. ???????
????1. ???????????????????????????????
????int(*pf)(std::string s1);
???????????????????????????????????int???????ú???????????????????????????C++?漲???????????????????ú????????????????????????
????1 int test(std::string s1) { return 0; }
????2 int(*pf)(std::string s1);
????3 pf = test;
????4 pf = &test;
????5 test(std::string());
????6 (*test)(std::string());
???????????????÷???????????????C++11?У?????????????β?÷???????????????????????????????????????????????????
????auto foo() -> int(*)(std::string s1);
???????????decltype???????????????????????????????????????????????????????????????????????????????
????decltype(test) *getfcn();
??????. lambda?????????????????????C++???????
???????lambda?????????????????????????????????????????δ???????????????????κκ???????????lambda????????????????????????б??????????壬????????????????????????????????
????lambda???????β?÷???????????????????????????????βΣ?????????????????
????[capture list](parameter list) -> return type{function body }
????lambda????????????????????βΣ????磺
????auto fcn = [] {return 42;};//?????????????????fcn????lambda????
????//????????б????????????????????
???????Щ??????????ν??????ββ???????????????????????????????????????lambda??????????????????????????????????????<algorithm>??????find_if?????????????????ν?????????漲??Χ?????????????????????????????????????????????vector<string>????????????????vector??????????l????????????????????????????find_if?????????????????????????????????????lambda????????????
???????????????
1 #include <algorithm>
2 #include <iostream>
3 #include <vector>
4
5 using std::vector;
6 using std::find_if;
7 using std::for_each;
8 using std::cout;
9 using std::endl;
10
11 void searchSegment(vector<int> nums?? const int floorSize?? const int ceilSize)
12 {
13     std::stable_sort(nums.begin()?? nums.end()??
14         [](const int &a?? const int &b) { return a < b;});//???sort??stable_sort??comp(x??x)?????????????false
15     auto segFloorIndex = find_if(nums.begin()?? nums.end()??
16         [&floorSize](const int &a) ->bool { return a >= floorSize; });
17     auto segCeilIndex = find_if(nums.begin()?? nums.end()??
18         [&](const int &a) { return a >= ceilSize; });
19     cout << "The size of the segment is " << segCeilIndex - segFloorIndex << endl;
20 }
??????????????????ò??????ò????????????&??????????ò?????????Щ???????????????????????????????????????????????????????????????segCeilIndex???????????????&??????????е????ò??????
????????????????????ú?????????????????????б??????????????&?????ò???????=??????????????????????????????ò?????????????????????????????????????????????????????????????????????????????ò??????????????????????????????
????lambda???????????????????????????????????mutable????????????????ò????????????????????????????????磺
????int v;
????auto f = [v]()mutable {return ++v; };
??????Щ???lambda??????β?÷???????????????????????if_else????????????:????????????????????????????????segFloorIndex?????->bool??
????lambda?????????????????????????÷???????5????????????Щ??????С???????д???ε?????????????д?ú?????