| |
Справочное описание GLib | ||||
---|---|---|---|---|
Pointer ArraysPointer Arrays — Массив указателей для любого типа данных, который увеличивается автоматически при добавлении элементов. |
#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);
Массивы указателей похожи на простые массивы, но используются только для хранения указатедей.
Если вы удалите элементы из массива, элементы из конца массива переместятся в свободное пространство освобождённое удалёнными элементами. Это значит что вы не должны полагаться на сохраняющуюся нумерацию специфичных элементов. Вы должны быть так же внимательны удаляя элементы при перемещении через массив.
Для создания массива указателей, используйте g_ptr_array_new()
.
Для добавления элементов в массив указателей, используйте g_ptr_array_add()
.
Для удаления элементов из массива указателей, используйте g_ptr_array_remove()
,
g_ptr_array_remove_index()
, или
g_ptr_array_remove_index_fast()
.
Для доступа к элементам в массиве указателей, используйте g_ptr_array_index()
.
Для установки размера массива указателей, используйте g_ptr_array_set_size()
.
Для освобождения массива указателей, используйте g_ptr_array_free()
.
Пример 7. Using a GPtrArray
GPtrArray *gparray; gchar *string1 = "one", *string2 = "two", *string3 = "three"; gparray = g_ptr_array_new (); g_ptr_array_add (gparray, (gpointer) string1); g_ptr_array_add (gparray, (gpointer) string2); g_ptr_array_add (gparray, (gpointer) string3); if (g_ptr_array_index (gparray, 0) != (gpointer) string1) g_print ("ERROR: got %p instead of %p\n", g_ptr_array_index (gparray, 0), string1); g_ptr_array_free (gparray, TRUE);
typedef struct { gpointer *pdata; guint len; } GPtrArray;
Содержит общедоступные поля массива указателей.
GPtrArray* g_ptr_array_new (void);
Создаёт новый GPtrArray.
Возвращает : | новый GPtrArray. |
GPtrArray* g_ptr_array_sized_new (guint reserved_size);
Создаёт новый GPtrArray
с предварительно распределенными reserved_size
указателями.
Это исключает частое перераспределение, если вы собираетесь добавить много указателей в массив.
Однако помните, размер массива остаётся 0.
reserved_size : |
количество предварительно распределённых указателей. |
Возвращает : | новый GPtrArray. |
void g_ptr_array_add (GPtrArray *array, gpointer data);
Добавляет указатель в конец массива указателей. Массив будет автоматически увеличен, если это необходимо.
array : |
GPtrArray. |
data : |
добавляемый указатель. |
gboolean g_ptr_array_remove (GPtrArray *array, gpointer data);
Удаляет первый найденный полученный указатель из массива. Следующие элементы перемещаются вниз на одно место.
Она возвращает TRUE
если указатель был удалён, или
FALSE
если указатель не найден.
gpointer g_ptr_array_remove_index (GPtrArray *array, guint index_);
Удаляет указатель с полученным номером из массива указателей. Следующие элементы перемещаются на одну позицию вниз.
array : |
GPtrArray. |
index_ : |
номер указателя для удаления. |
Возвращает : | указатель который был удалён. |
gboolean g_ptr_array_remove_fast (GPtrArray *array, gpointer data);
Удаляет первый обнаруженный указатель, полученный в качестве параметра, из массива указателей.
Оставшиеся элементы в массиве используются для заполнения пространства, поэтому эта функция не сохраняет порядок массива.
Но она быстрее чем g_ptr_array_remove()
.
Возвращает TRUE
если указатель был удалён,
или FALSE
если указатель не найден в массиве.
gpointer g_ptr_array_remove_index_fast (GPtrArray *array, guint index_);
Удаляет указатель с полученным номером из массива указателей.
Оставшиеся элементы в массиве используются для заполнения пространства, поэтому эта функция не сохраняет порядок в массиве.
Но она быстрее чем
g_ptr_array_remove_index()
.
array : |
GPtrArray. |
index_ : |
номер указателя для удаления. |
Возвращает : | указатель который был удалён. |
void g_ptr_array_remove_range (GPtrArray *array, guint index_, guint length);
Удаляет полученное количество указателей начиная с полученного номера из GPtrArray. Следующие элементы перемещаются закрывая пустоту.
array : |
GPtrArray .
|
index_ : |
номер первого указателя для удаления. |
length : |
количество указателей для удаления. |
Начиная с версии 2.4
void g_ptr_array_sort (GPtrArray *array, GCompareFunc compare_func);
Сортирует массив, используя compare_func
которая должна быть в стиле
функции сравнения qsort()
(возвращает отрицательное если первый arg меньше чем второй arg,
ноль если они равны, положительное если первый arg больше чем второй arg).
Если оба сравниваемых элемента массива равны, их положение в порядке сортировки массива неопределено.
Функция сравнения для g_ptr_array_sort()
не принимает указатели из массива как аргументы, она принимает указатели на указатели в массиве.
array : |
GPtrArray. |
compare_func : |
функция сравнения. |
void g_ptr_array_sort_with_data (GPtrArray *array, GCompareDataFunc compare_func, gpointer user_data);
Похожа на g_ptr_array_sort()
,
но функция сравнения имеет дополнительный аргумент пользовательских данных.
Функция сравнения для g_ptr_array_sort_with_data()
не принимает указатели из массива как аргументы, она принимает указатели на указатели в массиве.
array : |
GPtrArray. |
compare_func : |
функция сравнения. |
user_data : |
данные помещаемые в compare_func .
|
void g_ptr_array_set_size (GPtrArray *array, gint length);
Устанавливает размер массива, расширяя его если необходимо.
Новые элементы устанавливаются в NULL
.
array : |
GPtrArray. |
length : |
новый размер массива указателей. |
#define g_ptr_array_index(array,index_)
Возвращает указатель с полученным номером массива указателей.
array : |
GPtrArray. |
index_ : |
номер возвращаемого указателя. |
Возвращает : | указатель с полученным номером. |
gpointer* g_ptr_array_free (GPtrArray *array, gboolean free_seg);
Освобождает всю память распределённую для массива указателей.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |