| | | ? | | | | | ? | | 最初都是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() | | | | | | | ? | | 最初都是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(第一項) | | | | | | | | | ? | | 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 *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 | | |