STL.h

最近老是被系统的一些STL卡到飞起,然后就手打了一个STL.h 库函数还没有打完,以后打新的还会再更,大家也可以使用,顺便帮我找一下bug,然后我再改进!

 1 template< typename RT >class queue
 2 {
 3     public:
 4     RT sta[10000005];
 5     int l,r;
 6     void clear(){l=r=0;}
 7     inline void push(RT x){sta[r++]=x;return ;}
 8     inline void pop(){l++;return ;}
 9     inline RT front(){return sta[l];}
10     inline bool empty(){return r==l;}
11     inline bool size(){return r!=l;}
12 };
13 template< typename RT >class stack
14 {
15     public:
16     RT sta[10000005];
17     int topp;
18     void clear(){topp=0;}
19     inline void push(RT x){sta[++topp]=x;return ;}
20     inline void pop(){topp--;return ;}
21     inline bool empty(){return topp==0;}
22     inline bool size(){return topp;}
23     inline bool top(){return sta[topp];}
24 };
25 template< typename RT >class hash_table
26 {
27     public:
28     int mod;
29     inline void init(int x){mod=x;return ;}
30     int head[100005],vvt[100005],nxt[100005],tot;
31     RT ver[100005];
32     inline void insert(int x,RT ac)
33     {
34         int u=x%mod;
35         for(int i=head[u];i;i=nxt[i])
36         {
37             RT y=ver[i];
38             if(y==ac){vvt[i]++;return ;}
39         }
40         ver[++tot]=ac;
41         nxt[tot]=head[u];
42         head[u]=tot;
43         vvt[tot]++;
44     }
45     inline int query_times(int x,RT ac)
46     {
47         int u=x%mod;
48         for(int i=head[u];i;i=nxt[i])
49         {
50             RT y=ver[i];
51             if(y==ac)return vvt[i];
52         }
53         return 0;
54     }
55 };

//////未完/////////

2019.9.23 UPDATE

更新了queue和stack的大小参数和一些骚操作!

hash_table 没有更新!

 1 //#include<iostream>
 2 //#include<cstdio>
 3 //#include<cstdlib>
 4 //#include<algorithm>
 5 //using namespace std;
 6 
 7 
 8 //make by lsc; %%%stl
 9 template<typename RT,int MAXN>
10 class stack
11 {
12     public:
13     RT sta[MAXN];int topp;
14     inline void clear(){topp=0;return ;}
15     inline void init(){topp=0;return ;}
16     inline void push(RT x){sta[++topp]=x;return ;}
17     inline int size(){return topp;}
18     inline bool empty(){return topp;}
19     inline int bottom(){if(topp==0)return -(1<<10);else return sta[1];}
20     inline int num(RT x){return sta[x];}
21     inline void sort_stack(RT x){sort(sta+1,sta+topp+1);if(x)return ;else reverse(sta+1,sta+topp+1);return ;}//如果x==1,从小到大,else less; 
22     /*
23      if struct sort please make function!
24      */
25 };
26 template<typename RT,int MAXN>
27 class queue
28 {
29     public:
30     #define re register
31     RT sta[MAXN];
32     int fr,back;
33     inline void init(){fr=1;back=0;}
34     inline void push(re RT x){sta[++back]=x;return ;}
35     inline void pop(){fr++;return ;}
36     inline RT front(){return sta[fr];}
37     inline bool empty(){if(back>=fr)return 0;else return 1;}
38     inline bool size(){if(back<=fr)return 0;else return 1;}
39     inline void sort_queue(RT x){sort(sta+back,sta+fr+1);if(x)return ;else reverse(sta+back,sta+fr+1);return ;}
40 };

 UPDATE 新版本!

 1 /*
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<algorithm>
 6 using namespace std;
 7 */
 8 
 9 //make by lsc; %%%stl
10 template<typename RT,int MAXN>
11 class stack
12 {
13     public:
14     RT sta[MAXN];int topp;
15     inline void clear(){topp=0;return ;}
16     inline void init(){topp=0;return ;}
17     inline void push(RT x){sta[++topp]=x;return ;}
18     inline int size(){return topp;}
19     inline bool empty(){return topp;}
20     inline int bottom(){if(topp==0)return -(1<<10);else return sta[1];}
21     inline int num(RT x){return sta[x];}
22     inline void pop(){topp--;if(topp<0)topp=0;return ;}
23     inline void sort_stack(RT x){sort(sta+1,sta+topp+1);if(x)return ;else reverse(sta+1,sta+topp+1);return ;}//如果x==1,从小到大,else less; 
24     /*
25      if struct sort please make function!
26      */
27 };
28 template<typename RT,int MAXN>
29 class queue
30 {
31     public:
32     #define re register
33     RT sta[MAXN];
34     int fr,back;
35     inline void init(){fr=1;back=0;}
36     inline void push(re RT x){sta[++back]=x;return ;}
37     inline void pop(){fr++;return ;}
38     inline RT front(){return sta[fr];}
39     inline bool empty(){if(back>=fr)return 0;else return 1;}
40     inline bool size(){if(back<=fr)return 0;else return 1;}
41     inline void sort_queue(RT x){sort(sta+back,sta+fr+1);if(x)return ;else reverse(sta+back,sta+fr+1);return ;}
42 };
43 
44 template<typename RT,int MAXN>
45 class priority_queue
46 {
47     public:
48     RT q[MAXN];int sz;
49     priority_queue(){sz=0;}
50     inline void push(int x)
51     {
52         q[++sz]=x;
53         for(int i=sz,j=i>>1;j;i=j,j>>=1)
54             if(q[j]>q[i])swap(q[j],q[i]);
55     }
56     inline void pop()
57     {
58         q[1]=q[sz--];
59         for(int i=1,j=i<<1;j<=sz;i=j,j<<=1)
60         {
61             if((j|1)<=sz&&q[j|1]<q[j])j=j|1;
62             if(q[i]>q[j])swap(q[i],q[j]);
63             else break;
64         }
65     }
66     inline RT top(){return q[1];}
67 };
68 //UPDATE 2019.9.23 pair 未经过测试!
69 template<typename RT,typename RE>
70 class pair
71 {
72     public:
73     RT first;RE second;
74     pair(){first=0,second=0;}
75     inline void make_pair(RT a,RE b){first=a,second=b;return ;}
76     /*
77      THIS FUNCTION THE DIRECTOR DIDN'T TRUST IT ,SO THE THINGS AFTER YOU USE IT ONLY YOU BEAR!    
78      */
79 };

 UPDATE 2019.9.26 整理了一下,但没有测试!

  1 /*
  2 #include<iostream>
  3 #include<cstdio>
  4 #include<cstdlib>
  5 #include<algorithm>
  6 using namespace std;
  7 */
  8 
  9 //make by lsc; %%%stl
 10 template<typename RT,int MAXN>
 11 class stack
 12 {
 13     public:
 14     RT sta[MAXN];int topp;
 15     inline void clear(){topp=0;return ;}
 16     inline void init(){topp=0;return ;}
 17     inline void push(RT x){sta[++topp]=x;return ;}
 18     inline int size(){return topp;}
 19     inline bool empty(){return topp;}
 20     inline int bottom(){if(topp==0)return -(1<<10);else return sta[1];}
 21     inline int num(RT x){return sta[x];}
 22     inline void pop(){topp--;if(topp<0)topp=0;return ;}
 23     inline void sort_stack(RT x){sort(sta+1,sta+topp+1);if(x)return ;else reverse(sta+1,sta+topp+1);return ;}//如果x==1,从小到大,else less; 
 24     /*
 25      if struct sort please make function!
 26      */
 27 };
 28 template<typename RT,int MAXN>
 29 class queue
 30 {
 31     public:
 32     #define re register
 33     RT sta[MAXN];
 34     int fr,back;
 35     inline void init(){fr=1;back=0;}
 36     inline void push(re RT x){sta[++back]=x;return ;}
 37     inline void pop(){fr++;return ;}
 38     inline RT front(){return sta[fr];}
 39     inline bool empty(){if(back>=fr)return 0;else return 1;}
 40     inline bool size(){if(back<=fr)return 0;else return 1;}
 41     inline void sort_queue(RT x){sort(sta+back,sta+fr+1);if(x)return ;else reverse(sta+back,sta+fr+1);return ;}
 42 };
 43 
 44 template<typename RT,int MAXN>
 45 class priority_queue
 46 {
 47     public:
 48     RT q[MAXN];int sz;
 49     priority_queue(){sz=0;}
 50     inline void push(int x)
 51     {
 52         q[++sz]=x;
 53         for(int i=sz,j=i>>1;j;i=j,j>>=1)
 54             if(q[j]>q[i])swap(q[j],q[i]);
 55     }
 56     inline void pop()
 57     {
 58         q[1]=q[sz--];
 59         for(int i=1,j=i<<1;j<=sz;i=j,j<<=1)
 60         {
 61             if((j|1)<=sz&&q[j|1]<q[j])j=j|1;
 62             if(q[i]>q[j])swap(q[i],q[j]);
 63             else break;
 64         }
 65     }
 66     inline RT top(){return q[1];}
 67 };
 68 
 69 //UPDATE 2019.9.23 pair 未经过测试!
 70 template<typename RT,typename RE>
 71 class pair
 72 {
 73     public:
 74     RT first;RE second;
 75     pair(){first=0,second=0;}
 76     inline void make_pair(RT a,RE b){first=a,second=b;return ;}
 77     /*
 78      THIS FUNCTION THE DIRECTOR DIDN'T TRUST IT ,SO THE THINGS AFTER YOU USE IT ONLY YOU BEAR!    
 79      */
 80 };
 81 
 82 template< typename RT >class hash_table
 83 {
 84     public:
 85     int mod;
 86     inline void init(int x){mod=x;return ;}
 87     int head[100005],vvt[100005],nxt[100005],tot;
 88     RT ver[100005];
 89     inline void insert(int x,RT ac)
 90     {
 91         int u=x%mod;
 92         for(int i=head[u];i;i=nxt[i])
 93         {
 94             RT y=ver[i];
 95             if(y==ac){vvt[i]++;return ;}
 96         }
 97         ver[++tot]=ac;
 98         nxt[tot]=head[u];
 99         head[u]=tot;
100         vvt[tot]++;
101     }
102     inline int query_times(int x,RT ac)
103     {
104         int u=x%mod;
105         for(int i=head[u];i;i=nxt[i])
106         {
107             RT y=ver[i];
108             if(y==ac)return vvt[i];
109         }
110         return 0;
111     }
112 };
113 //2019.9.26 UPDATE
114 //lower_bound but didn't test ,you can test it ,but not int exam!
115 //I dont't konw if it has bugs!
116 template<typename RT,typename RE>
117 RE lower_bound(RT *a,RE l,RE r)
118 {
119     while(l<r)
120     {
121         int mid=(l+r)>>1;
122         if(a[mid]>=r)r=mid;
123         else l=mid+1;
124     }
125     return l;
126 };
原文地址:https://www.cnblogs.com/hzoi-lsc/p/11463534.html