1. 前向声明
在.h
文件中常需要定义某些类的指针,所以需要使用include
引入该类的头文件。可以使用前向声明的方式来避免引入头文件。
优点:
1.不必在include头文件了,相对会省点编译时间。
2.避免头文件循环引用而造成的错误
class B;
class A {
private:
B* b;
};
注:C++类的前向声明,只能用于定义指针、引用、以及用于函数形参的指针和引用。而不能定义对象,也不能访问类的对象!
2. 逆波兰式
逆波兰式即后缀表达式,把运算对象写在前面,运算符号写在后面。
实现方法:从左往右扫描表达式,遇到运算对象,压栈,遇到运算符,取栈顶两个运算后再压栈
举例:
a+b*c -> abc*+
(a+b)*c -> ab+c*
ABCD-*+EF*- -> A+B*(C-D)-E*F
3.
库函数
char *strstr(const char *str1, const char *str2)
函数用于判断字符串 str2 是否是 str1 的子串。
如果是,则该函数返回 str2 在 str1 中首次出现的地址;否则,返回NULL。
char *strchr(const char *str, int c)
函数用于查找字符串 str 中第一次出现字符 c 的位置。
成功返回在字符串 str 中第一次出现字符 c 的位置,否则,返回NULL。
char *strcat(char *dest, const char *src)
函数用于将字符串 src 追加到字符串 dest 的结尾。
int strcmp(const char *str1, const char *str2)
函数用于比较字符串 str1 和字符串 str2 的大小。
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。
char *strcpy(char *dest, const char *src)
函数用于将字符串 src 复制给字符串 dest。
4. 线程锁EnterCriticalSection
和LeaveCriticalSection
用法
定义临界区对象,在线程中访问需要保护的资源时进入临界区,访问结束后离开临界区
//类中定义
CRITICAL_SECTION cs; //定义临界区对象
//线程函数中
EnterCriticalSection(&cs); //进入临界区
//...访问资源
LeaveCriticalSection(&cs); //离开临界区
5. c_str()
函数
语法: const char *c_str()
c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同.
因为c中没有string类型,为了与c语言兼容,故必须通过string类对象的成员函数c_str()把string对象转换成c中的字符串样式。
6. lambda表达式
lambda表达式就是一个匿名函数,
基本语法格式:
[caputrue](params)opt->ret{body;};
[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}
说明:
1. [函数对象参数]
[ ] :无捕获,函数体内不能访问任何外部变量
[=] :以值(拷贝)的方式捕获所有外部变量,函数体内可以访问,但是不能修改。
[&] :以引用的方式捕获所有外部变量,函数体内可以访问并修改(需要当心无效的引用);
[var] :以值(拷贝)的方式捕获某个外部变量,函数体可以访问但不能修改。
[&var] :以引用的方式获取某个外部变量,函数体可以访问并修改
[this] :捕获this指针,可以访问类的成员变量和函数,
[=,&var] :引用捕获变量var,其他外部变量使用值捕获。
[&,var] :只捕获变量var,其他外部变量使用引用捕获。
2. (操作符重载函数参数)
调用的时候需要传递的参数,可以缺省
3. mutable 或 exception 声明
mutable 表示函数体可以修改捕获变量的,同时可以访问捕获对象的非常属性成员函数
exception 说明lambda表达式是否抛出异常以及何种异常
4. 返回值类型
标识函数返回值的类型,当返回值为 void,或者函数体中只有一处 return 时,编译器可以自动推断出返回值类型,可以省略。
5. {函数体}
函数体中为这个函数的实现。可以为空,但不能省略。