inline :
1. inline 定义的类的,函数的代码被放入中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。
2. 很明显,类的也是一个真正的函数,在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。
3. inline 可以作为某个,当然就可以在其中使用所在类的保护成员及私有成员。
在何时使用inline函数:
首先,你可以使用inline函数完全取代形式的宏定义。
另外要注意,一般只会用在函数内容非常简单的时候,这是因为,内联函数的代码会在任何调用它的地方展开,如果函数太复杂,代码膨胀带来的恶果很可能会大于效率的提高带来的益处。最重要的使用地方是用于类的存取函数。
view code#include#include #include #include #include using namespace std;typedef long long ll;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int N = 10010;const int INF = 1<<30;int _, n, pre[N], fa[N], sz[N], top[N];int gid, dep[N], son[N], id[N], fid[N];int Max[N<<2], Min[N<<2], neg[N<<2];struct edge{ int u, v, w, next; edge() {} edge(int u, int v,int w, int next):u(u),v(v),w(w),next(next) {}}e[N<<1];int ecnt;inline void addedge(int u, int v, int w){ e[ecnt] = edge(u, v, w, pre[u]); pre[u] = ecnt++; e[ecnt] = edge(v, u, w, pre[v]); pre[v] = ecnt++;}inline void dfs(int u, int f, int d){ sz[u]=1, fa[u]=f, dep[u]=d, son[u]=0; for(int i=pre[u]; ~i; i=e[i].next) { int v = e[i].v; if(v==f) continue; dfs(v, u, d+1); sz[u] += sz[v]; if(sz[son[u]] >1; build(lson); build(rson);}inline void Down(int rt){ if(neg[rt]==-INF) { int ls=rt<<1, rs=ls|1; fxor(neg[ls]), fxor(neg[rs]); Min[ls] = -Min[ls]; Max[ls] = -Max[ls]; swap(Max[ls], Min[ls]); Min[rs] = -Min[rs]; Max[rs] = -Max[rs]; swap(Max[rs], Min[rs]); neg[rt] = INF; }}inline void update(int L, int R, int c, int l, int r, int rt){ if(L<=l && R>=r){ if(c>-INF) Min[rt] = Max[rt] = c; else{ fxor(neg[rt]); Min[rt] = -Min[rt]; Max[rt] = -Max[rt]; swap(Min[rt], Max[rt]); } return ; } Down(rt); int m = (l+r)>>1; if(L<=m) update(L, R, c, lson); if(R>m) update(L, R, c, rson); Up(rt);}inline int query(int L, int R, int l, int r, int rt){ if(L<=l && r<=R) return Max[rt]; Down(rt); int m = (l+r)>>1; int ans = -INF; if(L<=m) ans = max(ans, query(L, R, lson)); if(R>m) ans = max(ans, query(L, R, rson)); return ans;}inline int lcaQ(int u, int v, bool flag){ int fu=top[u], fv=top[v]; int ans = -INF; while(fv!=fu) { if(dep[fu] 0 && str[0]!='D') { scanf("%d%d", &u, &v); if(str[0]=='Q') printf("%d\n",lcaQ(u, v, 1)); else if(str[0]=='N') lcaQ(u, v, 0); else update(id[e[2*u-1].u], id[e[2*u-1].u], v, 1, gid, 1); }}int main(){// freopen("in.txt", "r", stdin); cin>>_; while(_--) solve(); return 0;}