tbox的vector容器沿用了stl库中vector的命名,说白了就是以数组方式存储元素,也是整个容器库中最基础的容器之一。git
固然,在c中用tbox的vector跟用stl的vector其实差不了太多,用起来都很方便。github
先看个简单的例子熟悉下:算法
// 初始化一个维护大小写敏感字符串的vector容器,第一参数设置元素自动增加大小,这里使用0表示默认大小 tb_vector_ref_t vector = tb_vector_init(0, tb_element_str(tb_true)); if (vector) { // 在头部插入元素 tb_vector_insert_head(vector, "hi!"); // 在尾部插入元素 tb_vector_insert_tail(vector, "how"); tb_vector_insert_tail(vector, "are"); tb_vector_insert_tail(vector, "you"); // 遍历打印全部元素 tb_for_all (tb_char_t const*, cstr, vector) { // trace tb_trace_d("%s", cstr); } // 销毁vector容器 tb_vector_exit(vector); }
里面的tb_for_all
是用迭代器遍历容器,这个对全部的容器都支持,具体使用能够参考:迭代器的使用api
vector不只能够在头尾插入元素,还能够在指定索引的位置的先后插入元素:数组
// 在索引1的位置,插入元素,新元素的索引为1 tb_vector_insert_next(vector, 1, "xxx"); // 在索引1的前面插入元素, 新元素的索引为0 tb_vector_insert_prev(vector, 1, "xxx");
若是你要插入一连串重复的元素,可使用 tb_vector_ninsert_xxx
版本:函数
// 连续在尾部插入10个重复的"xxx" tb_vector_ninsert_head(vector, "xxx", 10); // 连续在头部插入10个重复的"xxx" tb_vector_ninsert_tail(vector, "xxx", 10);
若是要替换指定索引位置的元素内容,可使用replace系列操做:ui
// 替换索引5的元素内容为"xxx",前提是这个元素本来就存在 tb_vector_replace(vector, 5, "xxx");
要删除指定索引的元素,更简单:.net
// 删除索引位置5处的元素 tb_vector_remove(vector, 5); // 删除头部的一个元素 tb_vector_remove_head(vector); // 删除尾部最后一个元素 tb_vector_remove_last(vector);
像 替换、删除、插入等操做都有对应的 ninsert/nreplace/nremove
等批量处理连续重复数据的接口,这里就不细说了。。debug
在debug模式下,你还有使用dump接口,快速打印这个vector容器的全部数据信息,方便调试,不过只能在debug下使用哦:指针
#ifdef __tb_debug__ // dump 全部元素信息 tb_vector_dump(vector); #endif
不单单是vector,全部容器的元素定义,所有采用tb_element_xxx
的接口来定义,不只能维护字符串,还能维护各类类型:
通常状况下,自定义的各类结构体数据,能够经过tb_element_ptr/tb_element_mem
维护都能知足需求,这二者的区别在于,前者只维护指针,不维护数据,后者直接维护数据。
固然若是以为这样还不能知足本身的需求,也能够自定义本身的element类型,只要继承下tb_element_t
类型,实现下对应的api就好了。。
并且包括vector的全部容器,都跟algorithm算法库紧密相连,全部算法经过迭代器均可以完美适配各类容器,例如:
// 使用通用算法接口remove移除全部内容为"xxx"的元素 tb_remove(vector, "xxx"); // 移除第一个内容为"xxx"的元素 tb_remove_first(vector, "xxx"); // 移除全部 < 10的元素,tb_predicate_le是谓词函数,也能够实现本身的谓词逻辑 tb_remove_if(vector, tb_predicate_le, (tb_cpointer_t)10); // 统计全部 > 10的元素个数 tb_count_all_if(vector, tb_predicate_be, (tb_cpointer_t)10);
其余算法,能够参考:排序和查找算法的使用