您的位置:首页 > 其它

glib中的GList ,GSList,GString,GTree,GTimer

2011-04-15 13:34 211 查看
Glib数据结构

Glib数据结构







GList

最初都是NULL,不断插入形成表
name=g_list_append(name,datapointer) //注意这里并不是拷贝
name=g_list_prepend(name,datapointer);
name=g_list_insert(name,dattapointer,pos); //位置是从0开始

在表中移动
name=g_list_next(name)
name=g_list_previous(name;
name=g_list_last(name);
name=g_list_first(name);
name=g_list_nth(第一项);

g_list_free(表的第一项)
数据有时候需要g_free掉

使用比较函数
1. name=g_list_sort(name,(GCompareFunc)func);
gint (*GCompareFunc) (gconstpointer a, gconstpointer b) if (a<b) return -1 else if (a>b) return 1 else return 0;
2. name=g_list_insert_sorted(name,datapointer,(GCompareFunc)func);
3. name=g_list_remove(name,datapointer) 只有最前面的相同数据删除
name=g_list_remove_all(name,datapointer)

void g_list_foreach(name,(GFunc)func, user_data_pointer);
void (*GFunc) (gpointer data, gpointer user_data);
当然也有 g_slist_foreach()



GSList

最初都是NULL,不断插入形成表
name=g_slist_append(name,datap);
name=g_slist_prepend(name,datap);
name=g_slist_insert(name,datap);

在表中移动
name=g_slist_next(name);
name=g_slist_last(name)
name=g_slist_nth(第一项)

g_slist_free(表的第一项)





GTree *name = g_tree_new((GCompareFunc)func)); //这是一种平衡树
新建一个树需要一个比较函数,表中的比较函数也与之相同
插入一个数据,包含key,和value,比较函数用于key
void
g_tree_insert(name,keypointer,valuepointer) //与g_list_insert()不同,如果有相同的key就会覆盖value
void g_tree_remove(name,keypointer)
gpointer g_tree_lookup(name,keypointer) 返回keypointer
void g_tree_traverse(name,(GTraverseFunc)func,GTraverseType type, usr_data_pointer);
gint (*GTraverseFunc)(gpointer key, gpointer value, gpointer data); 如果返回true就停止遍历,否则false
GTraverseType 有3中 G_IN_ORDER, G_PRE_ORDER, G_POST_ORDER
g_true_destroy()



字符串



GString

GString *myname; GString 实际只是保存一个指针和一个数的结构
myname=g_string_new("Peter");
或者 myname=g_string_size_new(1000);

赋值 g_string_assign(GString *, "string"); 如果 “string"的长度大于其长度,将会导致重新分配内存,从而更改相应的指针
myname=g_string_assign(myname,"Peter Jobs");

释放串
gchar *g_string_free(GString *, boolean) 如果为false只是删除这个结构,如果是true就会删除其串
返回null如果是真,否则返回其串,串可以接着使用

操作
myname=g_string_append(myname,"Pete");
myname=g_string_prepend(myname,"pete");
myname=g_string_insert(myname,10,"Gtk+/") 注意从0开始
myname=g_string_up

使用
g_print(myname->str)
myname=g_string_up(myname);
myname=g_string_down(myname);
myname=g_string_erase(myname,0,4); 要删除的文本的位置以及字符数



传统字符串

gchar me[] = "pete"
gchar *mini;
mini=strdup(me); 复制
mini=strndup(me,2); 复制前两个 使用完后记得g_free()

串比较
g_strcasecmp(gchar *,gchar *)
g_strncasecmp(gchar *,gchar *) 比较前n个字符 注意这个函数是基于字符是bytes

分解串
gchar **g_strsplit(gchar *,"分解串“,最大数组长度)
注意使用完后,用void g_strfreev(a) 释放这个字符串数组



计时器

GTimer *myt;
myt=g_timer_new();
g_timer_destroy(myt);

启动和停止
g_timer_start(myt);
g_timer_stop(myt);
g_timer_reset(myt);
g_timer_continue(myt);

时间
gdouble g_timer_elapsed(myt,gulong *) 返回的是秒,gulong是毫秒,如果不是null

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: