LIB-ZC 支持向量(vector),
其 STRUCT 类型是 zvector_t,
是 LIB-ZC 的基本数据结构
推荐使用 zvector_push, zvector_pop;
不推荐使用 zvector_unshift, zvector_shift, zvector_insert, zvector_delete
数据结构
struct zvector_t {
char **data; /* 数据 */
int len; /* 个数 */
int size; /* 容量 */
int offset:31;
unsigned int mpool_used:1;
};
函数: 基本操作
zvector_t *zvector_create(int size);
- 创建
- 初始容量为 size
- 如果 size < 0, 则取默认值
void zvector_free(zvector_t *v);
void zvector_reset(zvector_t *v);
int zvector_len(zvector_t *v);
函数: 插入
void zvector_add(zvector_t *v, const void *val);
void zvector_push(zvector_t *v, const void *val);
void zvector_unshift(zvector_t *v, const void *val);
void zvector_insert(zvector_t *v, int idx, void *val);
- 如果(idx+1 <= 长度(v)), 则把 val 插到 idx 处, 原idx及其后元素顺序后移
- 如果(idx+1 > 长度(v)), 则增加长度, 把 val 插到 idx 处, 其余位置设置为 0
函数: 移除
zbool_t zvector_pop(zvector_t *v, void **val);
- 弹出尾部指针, 并赋值给 *val
- 存在则返回1, 否则返回 0
zbool_t zvector_shift(zvector_t *v, void **val);
- 弹出首部指针, 并赋值给 *val
- 存在则返回1, 否则返回 0
zbool_t zvector_delete(zvector_t *v, int idx, void **val);
- 弹出idx处的指针并赋值给 *val
- 存在则返回1, 否则返回 0
- 同时, idx 后的元素顺序前移
void zvector_truncate(zvector_t *v, int new_len);
- 截短为新长度 new_len
- 如果 new_len > 长度(v), 则无效
函数: 遍历
ZVECTOR_WALK_BEGIN(zvector_t *v, you_chp_type, var_your_ptr);
ZVECTOR_WALK_END
例子