glib库数组GArray介绍(转)
来源:互联网 发布:骑马与砍杀美女数据 编辑:程序博客网 时间:2024/05/16 09:36
glib库中的数组GArray类型很像C++标准容器库中的vector容器。要使用glib库中的数组中需要声明一个指向GArray类型的指针。GArray的定义如下:
struct GArray
{
gchar *data;
guint len;
};
{
gchar *data;
guint len;
};
然后就可以在这个数组前或者数组后添加数据,添加数据的时候数组也会像C++中的vector容器一样自动增长,
并分配内存。下面我们来看看这一段示例代码:
并分配内存。下面我们来看看这一段示例代码:
/*
* file: g_array.c
* desc: 这个文件用于演示glib库中数组GArray的用法
* compile: gcc -o g_array g_array.c `pkg-config --cflags --libs glib-2.0`
*/
#include <glib.h>
void display_array(GArray *array, int len, const char *prompt)
{
int i = 0;
printf("%s: /n", prompt);
for (i = 0; i < len; i++) {
printf("%d ", g_array_index(array, int, i));
}
printf("/n");
}
int main(int argc, char *argv[])
{
GArray *array = NULL;
int i = 0;
int cur_arr_len = 0;
int len = 0;
array = g_array_new(FALSE, TRUE, sizeof(int));
len = 0;
for (i = 10; i < 15; i++) {
g_array_append_val(array, i);
len++;
}
cur_arr_len += len;
display_array(array, cur_arr_len, "Create array");
int app_data[] = {30, 40, 50, 60};
int app_len = sizeof(app_data) / sizeof(int);
g_array_append_vals(array, app_data, app_len);
cur_arr_len += app_len;
display_array(array, cur_arr_len, "After append values 30 40 50 60");
len = 0;
for (i = 1; i < 4; i++) {
g_array_divpend_val(array, i);
len++;
}
cur_arr_len += len;
display_array(array, cur_arr_len, "After divpend value 1 2 3");
int divpend_data[] = {-10, -20, -30, -40};
int divpend_len = sizeof(divpend_data) / sizeof(int);
g_array_divpend_vals(array, divpend_data, divpend_len);
cur_arr_len += divpend_len;
display_array(array, cur_arr_len, "After divpend values -10 -20 -30 -40");
int data = 100;
g_array_insert_val(array, 5, data);
cur_arr_len += 1;
display_array(array, cur_arr_len, "After insert 100 at index 5");
g_array_remove_index(array, 5);
cur_arr_len -= 1;
display_array(array, cur_arr_len, "After remove value at index 5");
g_array_remove_index_fast(array, 10);
cur_arr_len -= 1;
display_array(array, cur_arr_len, "After remove value at index 10 fast");
g_array_free(array, TRUE);
}
* file: g_array.c
* desc: 这个文件用于演示glib库中数组GArray的用法
* compile: gcc -o g_array g_array.c `pkg-config --cflags --libs glib-2.0`
*/
#include <glib.h>
void display_array(GArray *array, int len, const char *prompt)
{
int i = 0;
printf("%s: /n", prompt);
for (i = 0; i < len; i++) {
printf("%d ", g_array_index(array, int, i));
}
printf("/n");
}
int main(int argc, char *argv[])
{
GArray *array = NULL;
int i = 0;
int cur_arr_len = 0;
int len = 0;
array = g_array_new(FALSE, TRUE, sizeof(int));
len = 0;
for (i = 10; i < 15; i++) {
g_array_append_val(array, i);
len++;
}
cur_arr_len += len;
display_array(array, cur_arr_len, "Create array");
int app_data[] = {30, 40, 50, 60};
int app_len = sizeof(app_data) / sizeof(int);
g_array_append_vals(array, app_data, app_len);
cur_arr_len += app_len;
display_array(array, cur_arr_len, "After append values 30 40 50 60");
len = 0;
for (i = 1; i < 4; i++) {
g_array_divpend_val(array, i);
len++;
}
cur_arr_len += len;
display_array(array, cur_arr_len, "After divpend value 1 2 3");
int divpend_data[] = {-10, -20, -30, -40};
int divpend_len = sizeof(divpend_data) / sizeof(int);
g_array_divpend_vals(array, divpend_data, divpend_len);
cur_arr_len += divpend_len;
display_array(array, cur_arr_len, "After divpend values -10 -20 -30 -40");
int data = 100;
g_array_insert_val(array, 5, data);
cur_arr_len += 1;
display_array(array, cur_arr_len, "After insert 100 at index 5");
g_array_remove_index(array, 5);
cur_arr_len -= 1;
display_array(array, cur_arr_len, "After remove value at index 5");
g_array_remove_index_fast(array, 10);
cur_arr_len -= 1;
display_array(array, cur_arr_len, "After remove value at index 10 fast");
g_array_free(array, TRUE);
}
用下面的命令编译程序
gcc -o g_array g_array.c `pkg-config --cflags --libs glib-2.0`
编译后生成可执行文件g_array,执行程序
$./g_array
程序执行结果如下
[plusboy@localhost c]$ ./g_array
Create array:
10 11 12 13 14
After append values 30 40 50 60:
10 11 12 13 14 30 40 50 60
After divpend value 1 2 3:
3 2 1 10 11 12 13 14 30 40 50 60
After divpend values -10 -20 -30 -40:
-10 -20 -30 -40 3 2 1 10 11 12 13 14 30 40 50 60
After insert 100 at index 5:
-10 -20 -30 -40 3 100 2 1 10 11 12 13 14 30 40 50 60
After remove value at index 5:
-10 -20 -30 -40 3 2 1 10 11 12 13 14 30 40 50 60
After remove value at index 10 fast:
-10 -20 -30 -40 3 2 1 10 11 12 60 14 30 40 50
下面解释一下上面这段代码
我们用函数g_array_new()创建一个数组,它有三个参数:第一个表示是否在数组的尾部添加'/0'结束符;
第二个表示当分配空间给数组元素时是否要把它初始化为‘0’;第三个表示数组里每个元素的长度。
我们用g_array_append_val()向数组中加入数据,这个函数有点像vector容器的push_back()函数,它向数组
的尾部添加数据,如果内存空间不够就自动分配内存。因为g_array_append_val()是一个使用引用的宏,
所以你不能像g_array_append_val(array, 3)这样调用,你必须先把3赋值给一个变量val,然后像
g_array_append_val(array, val)这样调用。
然后用一个display_array()函数打印数组中的元素,这个函数里用到了g_array_index()函数按索引取数组
中的元素,g_array_index()也有三个参数,第一个是要访问的数组,第二个是数组中的数据类型,第三个
是要访问的数组元素的索引。
g_array_append_vals()函数像g_array_append_val()函数一样,向数组尾部添加元素,只是g_array_append_vals()
一次可以添加多个元素。
g_array_divpend_vals()类似于g_array_append_vals(),只是添加的元素位于数组首部。
g_array_insert_val()函数向数组中指定位置插入元素,后面元素按顺序后移。
g_array_remove_index()函数删除数组中指定位置的元素,后面的元素按顺序前移。
g_array_remove_index_fast()函数删除数组中指定位置的元素,数组中的最后一个元素移到该位置,实际上
就是用最后一个元素的值赋给指定元素,然后删除除最后一个元素。所以该函数会改变数组的顺序。
最后不要忘了用g_array_free()删除数组,释放内存空间。
glib库的更多参考:
http://developer.gnome.org/doc/API/glib/index.html
http://developer.gnome.org/doc/API/2.0/glib/index.html
gcc -o g_array g_array.c `pkg-config --cflags --libs glib-2.0`
编译后生成可执行文件g_array,执行程序
$./g_array
程序执行结果如下
[plusboy@localhost c]$ ./g_array
Create array:
10 11 12 13 14
After append values 30 40 50 60:
10 11 12 13 14 30 40 50 60
After divpend value 1 2 3:
3 2 1 10 11 12 13 14 30 40 50 60
After divpend values -10 -20 -30 -40:
-10 -20 -30 -40 3 2 1 10 11 12 13 14 30 40 50 60
After insert 100 at index 5:
-10 -20 -30 -40 3 100 2 1 10 11 12 13 14 30 40 50 60
After remove value at index 5:
-10 -20 -30 -40 3 2 1 10 11 12 13 14 30 40 50 60
After remove value at index 10 fast:
-10 -20 -30 -40 3 2 1 10 11 12 60 14 30 40 50
下面解释一下上面这段代码
我们用函数g_array_new()创建一个数组,它有三个参数:第一个表示是否在数组的尾部添加'/0'结束符;
第二个表示当分配空间给数组元素时是否要把它初始化为‘0’;第三个表示数组里每个元素的长度。
我们用g_array_append_val()向数组中加入数据,这个函数有点像vector容器的push_back()函数,它向数组
的尾部添加数据,如果内存空间不够就自动分配内存。因为g_array_append_val()是一个使用引用的宏,
所以你不能像g_array_append_val(array, 3)这样调用,你必须先把3赋值给一个变量val,然后像
g_array_append_val(array, val)这样调用。
然后用一个display_array()函数打印数组中的元素,这个函数里用到了g_array_index()函数按索引取数组
中的元素,g_array_index()也有三个参数,第一个是要访问的数组,第二个是数组中的数据类型,第三个
是要访问的数组元素的索引。
g_array_append_vals()函数像g_array_append_val()函数一样,向数组尾部添加元素,只是g_array_append_vals()
一次可以添加多个元素。
g_array_divpend_vals()类似于g_array_append_vals(),只是添加的元素位于数组首部。
g_array_insert_val()函数向数组中指定位置插入元素,后面元素按顺序后移。
g_array_remove_index()函数删除数组中指定位置的元素,后面的元素按顺序前移。
g_array_remove_index_fast()函数删除数组中指定位置的元素,数组中的最后一个元素移到该位置,实际上
就是用最后一个元素的值赋给指定元素,然后删除除最后一个元素。所以该函数会改变数组的顺序。
最后不要忘了用g_array_free()删除数组,释放内存空间。
glib库的更多参考:
http://developer.gnome.org/doc/API/glib/index.html
http://developer.gnome.org/doc/API/2.0/glib/index.html
- glib库数组GArray介绍(转)
- glib库数组GArray介绍(转)
- glib库数组GArray介绍
- glib库数组GArray介绍
- glib库介绍
- glib库的介绍
- glib库队列GQueue介绍
- glib库中的GQuark介绍
- glib库队列GQueue介绍
- GLib介绍
- glib介绍
- glib 介绍
- GLib介绍
- glib介绍
- Glib介绍
- 安装GLIB(转)
- glib库单向链表GSList介绍
- glib库双向链表GList介绍
- 安装scim输入法
- tomcat应用中绝对路径
- JQuery小练习(2009-08-03)
- Excel 临时代码
- centos 操作系统
- glib库数组GArray介绍(转)
- JavaScript 浏览器检测
- 权限:强制位与冒险位
- shell learn 1
- Clutter学习(五):Clutter的兼容性问题——clutter actor的学习
- spring学习笔记:Spring IOC容器,Spring源码
- 惠州市外经贸企业资源信息平台开通——副市委书记开幕式发表讲话
- 详解MANIFEST.MF文件
- 创建窗口代码分析二