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

 

glib中的GList ,GSList,GString,GTree,GTimer相关推荐

  1. linux c glib中的hash table

    Glib是一个C语言编写的库,它本身是Gnome的一个部分,后来Glib剥离出来,它为Gnome提供了一些操作字符串和常用数据结构的工具函数.这些好的工具函数既然可以提供给gnome,使用,自然也可以 ...

  2. glib linux,[转载]linux下glib.h的介绍

    glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性.glib是Gtk +库和Gnome的基础.glib可以在多个平台下使用,比如Linux.Unix.Windows等.gl ...

  3. linux安装最新版的glib库,GLib库安装与简析

    GLib是GTK+和GNOME工程的基础底层核心程序库,是一个综合用途的实用的轻量级的C程序库, 它提供C语言的常用的数据结构的定义.相关的处理函数,有趣而实用的宏, 可移植的封装和一些运行时机能,如 ...

  4. Glib学习(23) IO通道 IO Channels

    glib源码下载:http://ftp.gnome.org/pub/gnome/sources/glib/ glib帮助文档:https://developer.gnome.org/glib/ IO通 ...

  5. 10.QT事件机制源码时序分析(中)

    接上一篇文章https://blog.csdn.net/Master_Cui/article/details/109162220,上篇文章已经说过,在Ubuntu18.04,QT的事件机制实际上是采用 ...

  6. libc glibc glib 的关系

    发现很多人没有搞清楚这两个东西.有个错误的观点:认为Glib是GNU的东东.(因为前面那个"g"),而Glibc是Glib的一个子集.     其实,Glib和Glibc基本上没有 ...

  7. glibc版本查看_Linux开发必知内容整理 | libc、glibc和glib的关系

    在进行Linux开发不可避免的要调用一些系统的API,我们经常开到的概念有诸如glibc.libc和glib等等.那么这些系统库之前的关系是什么样的呢?下面小编带大家了解一下这些库之前的共同点和差异, ...

  8. linux c语言 utf8读写,关于在C程序中处理UTF-8文本的方法详解

    UTF-8 互联网的普及, 强烈要求出现一种统一的编码方式. UTF-8就是在互联网上使用最广的一种unicode的实现方式. 其他实现方式还包括UTF-16和UTF-32, 不过在互联网上基本不用. ...

  9. SylixOS下移植glib时clock_gettime函数分析

    1. 问题分析 移植glib中间件时,运行测试用例出现异常错误,定位问题为g_clock_gettime函数获取的时间和系统API获取的时间不一致导致. glib中间件中g_get_monotonic ...

最新文章

  1. python字符串出栈方法_python字符串常用方法
  2. android parcelable 详细介绍
  3. tcga数据下载_TCGA数据下载(mRNA)
  4. small用于不连续数组_Excel公式技巧19: 在方形区域内填充不重复的随机整数
  5. Pgbouncer 介绍
  6. 二进制和八进制表示法
  7. Android QA
  8. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_4_Lambda标准格式...
  9. java图书管理系统(MySQL)
  10. java简单实现一个缓存_java简单实现缓存的三种方法
  11. JRebel-JVMTI [FATAL] Couldn‘t write to C:\Users\【完美解决方案】
  12. 测试数据科学家聚类技术的40个问题(附答案和分析)
  13. 交换机trunk接口
  14. jena java_对Jena的简单理解和一个例子
  15. openwrt mt7620a添加wifi指示灯(wled)的方法
  16. 什么东西可以改善睡眠,这些东西应该能帮到你
  17. python简单爬虫 指定汉字的笔画动图下载
  18. 前端工程化精讲第七课 低代码工具:如何用更少的代码实现更灵活的需求?
  19. 我在武汉新东方上过的8个老师
  20. TDD模式下的射频前端VSWR检测功能难点

热门文章

  1. ilpimage to bitmap
  2. linux文件系统简介
  3. python运行mcmc为何老出错_python中mcmc方法的实现
  4. 浅谈三级分销系统开发对企业的作用
  5. 3. Port scanners (端口扫描器 4个)
  6. 新型机器人模拟蜻蜓飞行可以乱真!
  7. iptables透明网桥无法使用透明代理错误
  8. 剑指Offer:剪绳子(动态规划、贪婪算法)
  9. ajax后台如何把对象转为json_57. Django 2.1.7 查询数据返回json格式
  10. 如何学好C、C++------思维方式的转变