Вы всегда можете создать свой собственный векторный класс esque прямо на C. Ниже приведен пример простого стека (вероятно, более уместно называемого PointStack), который я взломал вместе в качестве доказательства концепции. Создание LinkedLists и т.п. также не будет слишком сложным.
РЕДАКТИРОВАТЬ: я вижу другие решения, которые, вероятно, лучше, поскольку они не заставляют вас заново изобретать колесо .
struct PointVector {
CGPoint *data;
int numItems;
int maxSize;
};
void resize(struct PointVector *v, int newSize);
void pushPoint(struct PointVector *v, CGPoint newPoint);
void popPoint(struct PointVector *v);
void init(struct PointVector *v) {
v->data = NULL;
v->numItems = 0;
v->maxSize = 0;
}
void pushPoint(struct PointVector *v, CGPoint newPoint) {
if (v->numItems + 1 > v->maxSize)
resize(v, (v->maxSize ? v->maxSize * 2 : 1));
v->data[v->numItems++] = newPoint;
}
void popPoint(struct PointVector *v) {
if (v->numItems)
v->numItems--;
}
void resize(struct PointVector *v, int newSize) {
CGPoint *newData = calloc(sizeof(CGPoint), newSize);
for (int i = 0; i < v->numItems; i++)
newData[i] = v->data[i];
if (v->data != NULL)
free(v->data);
v->data = newData;
v->maxSize = newSize;
}