Glib学习(7) 动态指针数组 Pointer Arrays
来源:互联网 发布:少儿编程入门教程 编辑:程序博客网 时间:2024/06/05 04:35
先上说明文档网址:http://web.mit.edu/barnowl/share/gtk-doc/html/glib/glib-Pointer-Arrays.html
没有什么可以多说的,因为他和动态数组太像了,如果已经会使用动态数组的话学习这个数据类型就没有一点压力。
结构体定义:
GPtrArray
typedef struct { gpointer *pdata; guint len;} GPtrArray;
功能函数:
Synopsis
#include <glib.h> GPtrArray;GPtrArray* g_ptr_array_new (void);GPtrArray* g_ptr_array_sized_new (guint reserved_size);void g_ptr_array_add (GPtrArray *array, gpointer data);gboolean g_ptr_array_remove (GPtrArray *array, gpointer data);gpointer g_ptr_array_remove_index (GPtrArray *array, guint index_);gboolean g_ptr_array_remove_fast (GPtrArray *array, gpointer data);gpointer g_ptr_array_remove_index_fast (GPtrArray *array, guint index_);void g_ptr_array_remove_range (GPtrArray *array, guint index_, guint length);void g_ptr_array_sort (GPtrArray *array, GCompareFunc compare_func);void g_ptr_array_sort_with_data (GPtrArray *array, GCompareDataFunc compare_func, gpointer user_data);void g_ptr_array_set_size (GPtrArray *array, gint length);#define g_ptr_array_index (array,index_)gpointer* g_ptr_array_free (GPtrArray *array, gboolean free_seg);void g_ptr_array_foreach (GPtrArray *array, GFunc func, gpointer user_data);
直接上一小段测试代码,也是从动态数组的代码中修改过来的,基本一致
#include <glib.h>struct map { int key; char *value;} m[10] = { {1,"one"}, {2,"two"}, {3,"three"}, {4,"four"}, {5,"five"}, {6,"six"}, {7,"seven"}, {8,"eight"}, {9,"nine"}, {10,"ten"}};typedef struct map map;static gintsort(gconstpointer p1, gconstpointer p2){ char * a, *b; a = *(char **)(p1); b = *(char **)(p2); return (*a > *b ? +1 : *a == *b ? 0 : -1);}static gintsort_r(gconstpointer p1, gconstpointer p2, gpointer user_data){ char * a, *b; a = *(char **)(p1); b = *(char **)(p2); return (*a < *b ? +1 : *a == *b ? 0 : -1);}static voidprint(gpointer data, gpointer user_data){ g_printf("%s,", data); g_printf("\n");}static voidtest_array(void){ GPtrArray *gparray = NULL; gint i;// GPtrArray* g_ptr_array_new(); 创建动态指针数组指针 gparray = g_ptr_array_new ();// void g_ptr_array_add(GPtrArray *array,gpointer data); 添加data到数组array的后面 for (i = 0; i < sizeof(m)/sizeof(m[0]); i++) g_ptr_array_add(gparray, (gpointer)m[i].value); g_printf("There should be '%d' items now.\t\tResult: %d.\n", 10, gparray->len); g_printf("All of items:\n");// #define g_ptr_array_index(array,index_) 返回数组array中第index_个的值 for (i = 0; i < sizeof(m)/sizeof(m[0]); i++) g_printf("%s,", g_ptr_array_index(gparray, i)); g_printf("\n");// gpointer g_ptr_array_remove_index(GPtrArray *array, guint index_); 删除数组中的第index_值,并将后面的元素向前移动,对应的g_ptr_array_remove_index_fast函数的删除元素,然后使用最后一个元素填充,其他不移动,这样会执行的很快 g_ptr_array_remove_index(gparray, 1); g_printf("All of items[exclude the second item]:\n"); for (i = 0; i < sizeof(m)/sizeof(m[0])-1; i++) g_printf("%s,", g_ptr_array_index(gparray, i)); g_printf("\n");// gpointer g_ptr_array_remove_index_fast(GPtrArray *array, guint index_); 删除元素,然后使用最后一个元素填充,其他不移动 g_ptr_array_remove_index_fast(gparray, 1); g_printf("All of items[exclude the second item]:\n"); for (i = 0; i < sizeof(m)/sizeof(m[0])-1-1; i++) g_printf("%s,", g_ptr_array_index(gparray, i)); g_printf("\n");// void g_ptr_array_remove_range(GPtrArray *array, guint index_); 删除数组中从第index_开始的length多个元素,后面的元素被顺序下移 g_ptr_array_remove_range(gparray, 2, 2); g_printf("All of items[after remove 2 items from the third item]:\n"); for (i = 0; i < sizeof(m)/sizeof(m[0])-1-1-2; i++) g_printf("%s,", g_ptr_array_index(gparray, i)); g_printf("\n");// void g_ptr_array_sort(GPtrArray *array, GCompareFunc compare_func); 通过compare_func函数规则进行排序 g_ptr_array_sort(gparray, sort); g_printf("All of items[sorted]:\n"); for (i = 0; i < sizeof(m)/sizeof(m[0])-1-1-2; i++) g_printf("%s,", g_ptr_array_index(gparray, i)); g_printf("\n");// void g_ptr_array_sort_with_data(GPtrArray *array, GCompareDataFunc compare_func, gpointer user_data); compare_func函数带输入参数 user_data的排序 g_ptr_array_sort_with_data(gparray, sort_r, NULL); g_printf("All of items[sorted reversed]:\n"); for (i = 0; i < sizeof(m)/sizeof(m[0])-1-1-2; i++) g_printf("%s,", g_ptr_array_index(gparray, i)); g_printf("\n");//void g_ptr_array_foreach(GPtrArray *array,GFunc func,gpointer user_data); 遍历数组,将数据元素传递给funcg_ptr_array_foreach (gparray, print, (gpointer) NULL);// gchar* g_ptr_array_free(GPtrArray *array, gboolean free_segment); 释放动态数组,如果free_segment是true会同时把数据也释放掉 g_ptr_array_free(gparray, TRUE);}intmain(void){ g_printf("BEGIN:\n************************************************************\n"); test_array(); g_printf("\n************************************************************\nDONE\n"); return 0;}
运行结果:
linux@ubuntu:~/16021/glibdemo$ gcc Point_Array.c -o Point_Array -lglib-2.0linux@ubuntu:~/16021/glibdemo$ ./Point_Array BEGIN:************************************************************There should be '10' items now.Result: 10.All of items:one,two,three,four,five,six,seven,eight,nine,ten,All of items[exclude the second item]:one,three,four,five,six,seven,eight,nine,ten,All of items[exclude the second item]:one,ten,four,five,six,seven,eight,nine,All of items[after remove 2 items from the third item]:one,ten,six,seven,eight,nine,All of items[sorted]:eight,nine,one,six,seven,ten,All of items[sorted reversed]:ten,six,seven,one,nine,eight,ten,six,seven,one,nine,eight,************************************************************DONElinux@ubuntu:~/16021/glibdemo$
0 0
- Glib学习(7) 动态指针数组 Pointer Arrays
- Glib学习(6) 动态数组 Arrays
- Glib学习(8) 动态字节数组 Byte Arrays
- c语言实现动态指针数组Dynamic arrays
- [Pointer]C中指针与多维数组学习
- 数组和指针(Arrays and Pointers)
- 082.Pointer Array 指针数组
- 082.Pointer Array 指针数组
- 动态数组(指针)
- java学习(3) Arrays 管理数组
- 动态数组详解Dynamic Arrays
- Array is not pointer (数组不是指针)
- 071.Pointer Array 指向数组的指针
- 071.Pointer Array 指向数组的指针
- 指针、动态数组、二维数组、数组形参学习小记
- 函数指针(function pointer)
- 智能指针(smart pointer)
- C指针原理(40)-GLIB
- POJ 3630 Phone List 静态字典树Trietree
- c语言的一些技巧
- Linux虚拟机文件传输神器psftp用法
- Box2d源码学习<十四>TOI之碰撞时间的实现
- spark学习11之在idea中将eclipse导入的java project改成maven project
- Glib学习(7) 动态指针数组 Pointer Arrays
- spring数据连接泄漏
- Linux中利用shutdown命令关闭系统方法
- memcached安装
- HYSBZ 1758 重建计划
- 博客开始篇
- 类模板和模板函数连接出错处理
- 用redis的sadd和spop做后台抽奖
- 首次组长遇到的团队问题