GString结构

来源:互联网 发布:数据采集卡报价 编辑:程序博客网 时间:2024/05/16 17:43

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(mytgulong *)  返回的是秒,gulong是毫秒,如果不是null


原文地址   http://blog.chinaunix.net/space.php?uid=9466127&do=blog&id=2002369


原创粉丝点击