类属函数
通用指针参数实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| typedef unsigned char byte; void sort(void *base, unsigned int num, unsigned int element_size, bool (*cmp)(const void *, const void *) ) { (byte *)base+i*element_size cmp((byte *)base+i*element_size,(byte *)base+j*element_size) byte *p1=(byte *)base+i*element_size, *p2=(byte *)base+j*element_size; for (int k=0; k<element_size; k++){ byte temp=p1[k]; p1[k] = p2[k]; p2[k] = temp; } }
|
函数模板
template <class T1, class T2, ...> //class也可以写成typename
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| template <class T> void sort(T elements[], unsigned int count) { elements[i] elements[i] < elements [j] T temp=elements [i]; elements[i] = elements [j]; elements[j] = temp; }
int a[100]; sort(a,100);
double b[200]; sort(b,200);
A c[300]; sort(c,300);
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| template <class T> T max(T a, T b) { return a>b ? a : b; }
int x; double m; max(x,m);
max((double)x,m); max(x,(int)m); max<double>(x,m); max<int>(x,m);
|
类模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| template <class T> class Stack{ T buffer[100]; int top; public: Stack() { top = -1; } void push(const T &x); void pop(T &x); };
template <class T> void Stack <T>::push(const T &x) { ...... }
template <class T> void Stack <T>::pop(T &x) { ...... }
|
类模板实例化需要显式指出类型
Stack <int> st1;
STL(标准模板库)
容器
- vector
- list
- deque
- stack
- queue
- priority_queue
- map
- multimap
- set
- multiset
- string