长安的花

当学问走过漫漫古道
凿刻入千窟,心也从愚昧中苏醒

0%

Hack cpp STL Preprocessor

预处理器指令包含在代码中,前面带有井号 (#)。 这些行是预处理器的指令。 预处理器在代码的实际编译开始之前检查代码,并在常规语句实际生成任何代码之前解析所有这些指令。
所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。

Preprocessor 预处理器

如果需要换行,需要在行后 加’\’
举例

1
2
3
4
#define INF 10000000 //定义变量 不需要分号
if( val == INF) {
//Do something
}
1
2
#define add(a, b) a + b//定义函数 不需要分号
int x = add(a, b);
1
2
3
4
5
6
7
#define toStr(str) #str
#define io(v) cin>>v
#define foreach(v, i) for (int i = 0; i < v.size(); ++i)
#define FUNCTION(name,operator) \
inline void name(int &current, int candidate) \
{!(current operator candidate) ? current = candidate : false;}
#define INF (unsigned)!((int)0)

使用方法
cout << toStr(Result =) <<' '<< ans; toStr(Result =) == “Result =” 将括号内的用引号括起来

1
2
3
4
vector<int> v(n);
foreach(v, i) {// for (int i = 0; i < v.size(); ++i)
io(v)[i]; //将参数输入给v向量 cin>>v
}

函数其实是:

1
2
3
for (int i = 0; i < v.size(); ++i){
cin>>v[i];
}

内联函数 与 预处理器

引入内联函数的目的是为了解决程序中函数调用的效率问题,这么说吧,程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行时候才被替代。这其实就是个空间代价换时间的i节省。所以内联函数一般都是1-5行的小函数。在使用内联函数时要留神:

  1. 在内联函数内不允许使用循环语句和开关语句;
  2. 内联函数的定义必须出现在内联函数第一次调用之前;
  3. 类结构中所在的类说明内部定义的函数是内联函数。
    1
    2
    3
    4
    5
    #define FUNCTION(name,operator) \
    inline void name(int &current, int candidate) \
    {!(current operator candidate) ? current = candidate : false;}```

    使用方法
    FUNCTION(minimum, <)//将’<’输入给预处理器里的 operator
    FUNCTION(maximum, >)
    1

    minimum(mn, v[i]);
    maximum(mx, v[i]);
    ```
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道