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

来源:互联网 发布:迦南诗歌软件 编辑:程序博客网 时间:2024/06/06 02:47

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