函数绑定器
#include<functional>
using namespace std::placeholders;
struct mysruct
{
void add(int a)
{
cout << a << endl;
}
void add1(int a, int b)
{
cout << a << endl;
}
void add2(int a, int b, int c)
{
cout << a << endl;
}
};
void mainr11()
{
mysruct my1;
//my1.add(10);
cout << typeid(my1.add).name() << endl;
cout << typeid(&mysruct::add).name() << endl;
void (mysruct::*p)(int a) = &mysruct::add; //void (mysruct::*p)(int a) add的数据类型
//mysruct::*p p函数指针很难调用
//绑定包装器 包装类成员函数 用于使用
//函数名 对象指针(谁调用) 参数
auto fun1 = bind(&mysruct::add, &my1,_1); //有一个参数
auto fun2 = bind(&mysruct::add1, &my1, _2); //有二个参数
auto fun3 = bind(&mysruct::add2, &my1, _3); //有三个参数
fun1(1000);
fun2(1000,11);
fun3(1000,10,55);
cin.get();
}
struct MyStruct
{
int operator()(int a, int b=1)
{
return a + b;
}
};
int add(int a, int b=10)
{
cout << "a="<<a <<" "<<"b="<<b << endl;
return a + b;
}
void main()
{
auto fun = bind(add, 10, _1); //适配器模式
cout << fun(100) << endl;
auto fun1 = bind([](int a, int b)->int {return a + b;},10,_1);
cout << fun1(110) << endl; //绑定 从左向右
MyStruct my1;
cout << my1(10,41) << endl;
cin.get();
}
静态断言 内联
#include<cassert>
static_assert(sizeof(void*) >= 4, "kid you error");
int divxxx(int a, int b)
{
assert(b != 0); //断言
return a / b;
}
#define f(x) x*x*x //C语言内联
inline int getx(int x) //C++ 内联函数
{
return x*x*x;
}
CPP转义字符
#include<cstdlib>
void main()
{
string str(R"(D:\CloudMusic\cloudmusic.exe)");
//R"()"
system(str.c_str());
cout << str.c_str() << endl; //按照c风格 打印字符串 //\n不会换行
cin.get();
}
正则表达式
//regex_match //判断匹配
//regex_search //检索
//regex_replace //替换
#include<regex>
void mainr13()
{
regex reg("select ([a-zA-z]*) from ([a-zA-z]*)$");
cmatch what; //匹配的词语检索出来 (字符串数组)
bool isit = regex_match("select id from admin",what,reg); //判断匹配
for (size_t i = 0; i < what.size(); i++) //输出匹配的信息
{
cout << what[i + 1].first << "\t";
}
if (isit)
{
cout << "匹配" << endl;
}
else
{
cout << "不匹配" << endl;
}
//手机号 13 15 18 17
//~ 开头
//() 组
//[] 或
//{} 恰好几次
//$ 结尾
regex reg1("~(1[3|4|5|8|7][0-9]{9})");
string str1;
cin >> str1;
bool isit1 = regex_match(str1,reg1); //不需要返回结果
if (isit1)
{
cout << "匹配" << endl;
}
else
{
cout << "不匹配" << endl;
}
cmatch match1;
regex reg2("\\d+"); //数字
char str[50]("hello 8848, hello guo 180");
bool isok = regex_search(str, match1, reg2);
if (isok)
{
for (size_t i = 0; i !=match1.size(); i++)
{
cout << match1[i].first << endl;
}
}
else
{
cout << "不匹配" << endl;
}
cout<< regex_replace(str,reg2,"ABCD"); //将数字 替换成ABCD
cin.get();
}
日期匹配
{
//1999/12/25
regex reg("~\\d{4}/(0?[1-9]|1[0-2])/(0?[1-9]|[1-2][0-9]|3[0-1])$");
string str1;
getline(cin, str1); //获取一行 遇到\n结束
smatch m; //帮着转换
if (regex_match(str1,m, reg))
{
//m[0] 忽略
int year = atoi(m[1].str().c_str()); //获取整数
int month = atoi(m[2].str().c_str());
int data = atoi(m[3].str().c_str());
cout << year << " " << month << " " << data << endl;
cout << "匹配" << endl;
}
else
{
cout << "不匹配" << endl;
}
regex regx("\\s*[,#,;]+\\s*");
string strx;
getline(cin, strx);
//迭代器
sregex_token_iterator end; //拆分字符串
for (sregex_token_iterator it(strx.begin(),strx.end(),reg,-1);it!=end;it++)
{
cout << *it << endl;
}
cin.get();
}