NO IMAGE

C 常用新特性,持續更新……
1. std::for_each、std::mem_fn

#include <algorithm>  // std::for_each
#include <functional> // std::mem_fn
#include <iostream>
#include <vector>
#include <thread>
struct MfFe
{
int m_a;
int m_b;
int sum(int i, int j)
{
return i   j;
}
int tuple(int i)
{
return i*3;
}
};
int square(int i)
{
std::cout << i * i << std::endl;
return i * i;
}
int multiply(int i,int j)
{
std::cout << i * j << std::endl;
return i * j;
}
int main()
{
std::vector<std::thread> vecth;
for (int i = 0; i!=10;   i)
{
vecth.push_back(std::thread(multiply,i,i 1));
}
std::for_each(vecth.begin(), vecth.end(), std::mem_fn(&std::thread::join));
/* 在std::for_each中呼叫square */
std::vector<int> avec;
for (int i = 0; i!=10;  i)
{
avec.push_back(i);
}
/* 解引avec.begin()作為square的引數 */
std::for_each(avec.begin(), avec.end(), square);
/* 此處不能模仿L42的用法使用std::mem_fn(&MfFe::tuple),因此下面這句是錯誤的 */
//std::for_each(avec.begin(), avec.end(), std::mem_fn(&MfFe::tuple));
/* 使用std::mem_fn進行函式呼叫,std::mem_fn的引數必須是類函式 */
MfFe amf{ 1,2 };
auto fn = std::mem_fn(&MfFe::sum);
std::cout << fn(amf, amf.m_a, amf.m_b) << std::endl;
system("pause");
}