什么是C的好库,包括矢量,deques,堆栈,hashmap,treemaps,sets等数据结构?简单C,请和平台无关.
请注意,因为这是一个问题的地狱;-)
我想在C中使用模板函数进行泛型集合操作(如search,foreach等),同时保持编译器静态类型检查.当你使用像这个例子中的简单回调时,这是相当简单的:
#define MAKE_FOREACH(TYPE)\
void foreach_##TYPE (TYPE[n] array, int n, void(*f)(TYPE)) {\
for(int i = 0; i < n; i++) {\
f(array[i]);\
}\
}
Run Code Online (Sandbox Code Playgroud)
所以你可以这样做:
MAKE_FOREACH(int)
MAKE_FOREACH(float)
void intcallback(int x){
printf("got %d\n", x);
}
void floatcallback(float x){
printf("got %f\n", x);
}
int main(){
int[5] iarray = {1,2,3,4,5};
float[5] farray = {1.0,2.0,3.0,4.0,5.0};
foreach_int(iarray, 5, intcallback);
foreach_float(farray, 5, floatcallback);
}
Run Code Online (Sandbox Code Playgroud)
如果我想用返回类型实现回调,例如创建一个"map"函数,我可以这样做:
#define MAKE_MAP(TYPE, RTYPE)\
RTYPE* map_##TYPE (TYPE[n] array, int n, RTYPE(*f)(TYPE)) {\
RTYPE* result = (RTYPE*)malloc(sizeof(RTYPE)*n);\
for(int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 问题:为队列找到正确的数据结构:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
int main(int argc, const char *argv[])
{
Queue q;
ch ='A';
for (int k = 0; int k < 4; int k++) {
q.addQ(ch);
ch++;
q.addQ(ch);
ch=q.front();
q.removeQ();
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我试图编译它,但队列是未声明的:
$ gcc -o Qu_1 -g q_queue.c
q_queue.c: In function 'main':
q_queue.c:8: error: 'Queue' undeclared (first use in this function)
Run Code Online (Sandbox Code Playgroud)
问题:基本数据结构的库是什么,例如示例中的队列?