这是我刚才写的一个例子:
主程序
#include "queue.h"
int main() {
vector_handle v = vector_create();
int i;
for (i=0; i<100; ++i)
vector_push(v, 0.5 * i);
for (i=0; i<vector_size(v); ++i)
printf("data: %f\n", vector_data(v)[i]);
vector_destroy(v);
}
队列.h
#pragma once
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct vector * vector_handle;
vector_handle vector_create();
void vector_destroy(vector_handle vector);
void vector_realloc(vector_handle vector);
size_t vector_size(vector_handle vector);
float * vector_data(vector_handle vector);
void vector_push(vector_handle vector, float data);
float vector_pop(vector_handle vector);
队列.c
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
struct vector {
float *data;
size_t size;
size_t capacity;
};
struct vector * vector_create() {
struct vector *object = malloc(sizeof(struct vector));
object->size = 0;
object->capacity = 16;
object->data = malloc(sizeof(float) * object->capacity);
return object;
}
void vector_destroy(struct vector *object) {
free(object->data);
free(object);
}
void vector_realloc(struct vector *object) {
object->capacity *= 2;
object->data = realloc(object->data, sizeof(float) * object->capacity);
assert(object->data);
}
size_t vector_size(struct vector *object) {
return object->size;
}
float * vector_data(struct vector *object) {
return object->data;
}
void vector_push(struct vector *object, float data) {
if (object->size == object->capacity)
vector_realloc(object);
object->data[object->size] = data;
object->size++;
}
float vector_pop(struct vector *object) {
return object->data[object->size--];
}