#include<iostream>
#include<vector>
#include<numeric>
#include<algorithm>
#include<iterator>
#include<functional>
using namespace std;
auto fun0(int a, int b) -> bool
{
return a < b;
}
void fun(int a) {
cout << "构建lambda前: " << a << endl;
auto f = [a]() mutable {return ++a; };
cout << "构建lambda后: " << a << endl;
auto aa = f();
cout << "调用lambda后 a: " << a << endl;
cout << "调用lambda后 aa: " << aa << endl;
}
void fun1(int a) {
cout << "构建lambda前: " << a << endl;
auto f = [&a]() mutable {return ++a; };
cout << "构建lambda后: " << a << endl;
auto aa = f();
cout << "调用lambda后 a: " << a << endl;
cout << "调用lambda后 aa: " << aa << endl;
}
int main()
{
vector<int> A{ 0,1,2,3,4,5,6,7,8,9,10 };
cout << "find:" << endl;
auto resfind = find(A.begin(), A.end(), 5);
cout << "The result is: " << ((resfind == A.end()) ? "Not Find" : "Find") << endl;
cout << "accumulate:" << endl;
auto sum = accumulate(A.begin(), A.end(), 0);
cout << "Sum: " << sum << endl;
vector<int> B{ A };
cout << "equal:" << endl;
B.emplace_back(11);
cout << "A equal to B ? " << equal(A.begin(), A.end(), B.begin()) << endl;
cout << "fill:" << endl;
fill(B.begin(), B.end(), 0);
for (const auto &m : B)
cout << m << " ";
cout << endl;
cout << "fill_n:" << endl;
fill_n(B.begin(), 10, 9);
for (const auto &m : B)
cout << m << " ";
cout << endl;
cout << "copy:" << endl;
copy(A.begin(), A.end(), B.begin());
for (const auto &m : B)
cout << m << " ";
cout << endl;
cout << "replace:" << endl;
replace(B.begin(), B.end(), 0, 11);
for (const auto &m : B)
cout << m << " ";
cout << endl;
vector<int> C;
cout << "replace_copy:" << endl;
replace_copy(B.begin(), B.end(), back_inserter(C), 11, 0);
for (const auto &m : C)
cout << m << " ";
cout << endl;
replace_copy(B.begin(), B.end(), C.begin(), 11, 10);
for (const auto &m : C)
cout << m << " ";
cout << endl;
cout << "sort 与 unique:" << endl;
sort(C.begin(), C.end(), [](int a, int b)->bool {return a < b; });
for (const auto &m : C)
cout << m << " ";
cout << endl;
auto unique_iter = unique(C.begin(), C.end());
C.erase(unique_iter, C.end());
for (const auto &m : C)
cout << m << " ";
cout << endl;
cout << "for_each:" << endl;
for_each(C.begin(), C.end(), [](const int &a) {if (a > 5) cout << a << " "; });
cout << endl;
cout << "mutable:" << endl;
cout << "-----------捕获值----------" << endl;
fun(1);
cout << "--------捕获引用---------" << endl;
fun1(1);
cout << "transform:" << endl;
vector<int> D{ 0,1,-2,3,-4,5,-6 };
transform(D.begin(), D.end(), D.begin(), [](int a)->int { if (a > 0) return a; else return -a; });
copy(D.begin(), D.end(), ostream_iterator<int>(cout, " "));
cout << endl;
cout << "--------bind------------" << endl;
int ff = 4;
auto findif = bind(fun0, ff, placeholders::_1);
auto finditer = find_if(A.begin(), A.end(), findif);
while (finditer != A.end()) {
cout << *finditer << " ";
++finditer;
finditer = find_if(finditer, A.end(), findif);
}
cout << endl;
system("PAUSE");
return 0;
}
