前面时间我讲了c语言的泛型结构和this指针实现,这次我写了几个常用的数据结构通用模板。
国内下载: https://gitee.com/xunanmu/c_language_template.git
github下载: https://github.com/xunanmu/c_language_template.git
注意: 此源码只适用于gcc编译器!!!
注意: 此源码只适用于gcc编译器!!!
注意: 此源码只适用于gcc编译器!!!
-----templata.h
┆
-----array.h
┆
-----stack.h
┆
-----queue.h
┆
-----lsit.h
所有模板都是用宏实现的
下面是头文件是使用函数介绍文档,和实现思路介绍
C语言泛型模板
C语言模板与this指针
array.h
stack.h
queue.h
list.h
#include
#include "array.h"
ARRAY_TYPE_SET(char);
typedef struct person Person;
ARRAY_TYPE_SET(Person);
struct person{
char name[8];
char sex[4];
int age;
}person_3[]={
{"南木","男",20},
{"橙子","男",35},
{"时光","男",16},
{"岑子","男",22},
{"附离","男",18},
};
int main() {
/********array动态用法******************/
array(char) test=new(array(char));
for (char i = 'A'; i < 'H'; ++i) {
test.push_back(i);
}
for (char i = 'A'; i < 'H'; ++i) {
test.push_back(i);
}
void print_char(char c);
test.traversal(print_char);
test.sort().traversal(print_char).reverse().traversal(print_char);
/*********array静态用法***************/
array(Person) _static=new(array(Person));
_static.setArray(person_3, 5, 5,false);
void print_person(Person one);
_static.sort().traversal(print_person).reverse().traversal(print_person);
/***修改默认比较函数,按年龄比较***/
int agecmp(const void* one,const void* two);
_static.setcmp(agecmp);
_static.sort().traversal(print_person).reverse().traversal(print_person);
test.delete();
return 0;
}
void print_char(char c) {
printf("%c ", c);
}
void print_person(Person one) {
printf("<%s,%s,%d>\n", one.name, one.sex, one.age);
}
int agecmp(const void *one, const void *two) {
return ((Person *) one)->age > ((Person *) two)->age;
}
运行结果
A B C D E F G A B C D E F G
A A B B C C D D E E F F G G
G G F F E E D D C C B B A A
<南木,男,20>
<岑子,男,22>
<时光,男,16>
<橙子,男,35>
<附离,男,18>
<附离,男,18>
<橙子,男,35>
<时光,男,16>
<岑子,男,22>
<南木,男,20>
<时光,男,16>
<附离,男,18>
<南木,男,20>
<岑子,男,22>
<橙子,男,35>
<橙子,男,35>
<岑子,男,22>
<南木,男,20>
<附离,男,18>
<时光,男,16>
欢迎小伙伴一起学编程 这里有大量编程书籍
编程交流群:982865797