📄 glib-sequences.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"><title>Sequences</title><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="GLib Reference Manual"><link rel="up" href="glib-data-types.html" title="GLib Data Types"><link rel="prev" href="glib-Double-ended-Queues.html" title="Double-ended Queues"><link rel="next" href="glib-Trash-Stacks.html" title="Trash Stacks"><meta name="generator" content="GTK-Doc V1.9 (XML mode)"><link rel="stylesheet" href="style.css" type="text/css"><link rel="chapter" href="glib.html" title="GLib Overview"><link rel="chapter" href="glib-fundamentals.html" title="GLib Fundamentals"><link rel="chapter" href="glib-core.html" title="GLib Core Application Support"><link rel="chapter" href="glib-utilities.html" title="GLib Utilities"><link rel="chapter" href="glib-data-types.html" title="GLib Data Types"><link rel="chapter" href="tools.html" title="GLib Tools"><link rel="index" href="ix01.html" title="Index"><link rel="index" href="ix02.html" title="Index of deprecated symbols"><link rel="index" href="ix03.html" title="Index of new symbols in 2.2"><link rel="index" href="ix04.html" title="Index of new symbols in 2.4"><link rel="index" href="ix05.html" title="Index of new symbols in 2.6"><link rel="index" href="ix06.html" title="Index of new symbols in 2.8"><link rel="index" href="ix07.html" title="Index of new symbols in 2.10"><link rel="index" href="ix08.html" title="Index of new symbols in 2.12"><link rel="index" href="ix09.html" title="Index of new symbols in 2.14"><link rel="index" href="ix10.html" title="Index of new symbols in 2.16"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="glib-Double-ended-Queues.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="glib-data-types.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">GLib Reference Manual</th><td><a accesskey="n" href="glib-Trash-Stacks.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr><tr><td colspan="5" class="shortcuts"><nobr><a href="#id3272444" class="shortcut">Top</a>  |  <a href="#id3273630" class="shortcut">Description</a></nobr></td></tr></table><div class="refentry" lang="en"><a name="glib-Sequences"></a><div class="titlepage"></div><div class="refnamediv"><table width="100%"><tr><td valign="top"><h2><a name="id3272444"></a><span class="refentrytitle">Sequences</span></h2><p>Sequences — scalable lists</p></td><td valign="top" align="right"></td></tr></table></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">#include <glib.h> <a class="link" href="glib-Sequences.html#GSequence">GSequence</a>;typedef <a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>;<a class="link" href="glib-Basic-Types.html#gint">gint</a> (<a class="link" href="glib-Sequences.html#GSequenceIterCompareFunc">*GSequenceIterCompareFunc</a>) (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *a, <a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *b, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> data);<a class="link" href="glib-Sequences.html#GSequence">GSequence</a>* <a class="link" href="glib-Sequences.html#g-sequence-new">g_sequence_new</a> (<a class="link" href="glib-Datasets.html#GDestroyNotify">GDestroyNotify</a> data_destroy);void <a class="link" href="glib-Sequences.html#g-sequence-free">g_sequence_free</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq);<a class="link" href="glib-Basic-Types.html#gint">gint</a> <a class="link" href="glib-Sequences.html#g-sequence-get-length">g_sequence_get_length</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq);void <a class="link" href="glib-Sequences.html#g-sequence-foreach">g_sequence_foreach</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq, <a class="link" href="glib-Doubly-Linked-Lists.html#GFunc">GFunc</a> func, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> user_data);void <a class="link" href="glib-Sequences.html#g-sequence-foreach-range">g_sequence_foreach_range</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *begin, <a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *end, <a class="link" href="glib-Doubly-Linked-Lists.html#GFunc">GFunc</a> func, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> user_data);void <a class="link" href="glib-Sequences.html#g-sequence-sort">g_sequence_sort</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq, <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareDataFunc">GCompareDataFunc</a> cmp_func, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> cmp_data);void <a class="link" href="glib-Sequences.html#g-sequence-sort-iter">g_sequence_sort_iter</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq, <a class="link" href="glib-Sequences.html#GSequenceIterCompareFunc">GSequenceIterCompareFunc</a> cmp_func, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> cmp_data);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-get-begin-iter">g_sequence_get_begin_iter</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-get-end-iter">g_sequence_get_end_iter</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-get-iter-at-pos">g_sequence_get_iter_at_pos</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq, <a class="link" href="glib-Basic-Types.html#gint">gint</a> pos);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-append">g_sequence_append</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> data);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-prepend">g_sequence_prepend</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> data);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-insert-before">g_sequence_insert_before</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> data);void <a class="link" href="glib-Sequences.html#g-sequence-move">g_sequence_move</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *src, <a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *dest);void <a class="link" href="glib-Sequences.html#g-sequence-swap">g_sequence_swap</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *a, <a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *b);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-insert-sorted">g_sequence_insert_sorted</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> data, <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareDataFunc">GCompareDataFunc</a> cmp_func, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> cmp_data);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-insert-sorted-iter">g_sequence_insert_sorted_iter</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> data, <a class="link" href="glib-Sequences.html#GSequenceIterCompareFunc">GSequenceIterCompareFunc</a> iter_cmp, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> cmp_data);void <a class="link" href="glib-Sequences.html#g-sequence-sort-changed">g_sequence_sort_changed</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter, <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareDataFunc">GCompareDataFunc</a> cmp_func, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> cmp_data);void <a class="link" href="glib-Sequences.html#g-sequence-sort-changed-iter">g_sequence_sort_changed_iter</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter, <a class="link" href="glib-Sequences.html#GSequenceIterCompareFunc">GSequenceIterCompareFunc</a> iter_cmp, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> cmp_data);void <a class="link" href="glib-Sequences.html#g-sequence-remove">g_sequence_remove</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter);void <a class="link" href="glib-Sequences.html#g-sequence-remove-range">g_sequence_remove_range</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *begin, <a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *end);void <a class="link" href="glib-Sequences.html#g-sequence-move-range">g_sequence_move_range</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *dest, <a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *begin, <a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *end);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-search">g_sequence_search</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> data, <a class="link" href="glib-Doubly-Linked-Lists.html#GCompareDataFunc">GCompareDataFunc</a> cmp_func, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> cmp_data);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-search-iter">g_sequence_search_iter</a> (<a class="link" href="glib-Sequences.html#GSequence">GSequence</a> *seq, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> data, <a class="link" href="glib-Sequences.html#GSequenceIterCompareFunc">GSequenceIterCompareFunc</a> iter_cmp, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> cmp_data);<a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> <a class="link" href="glib-Sequences.html#g-sequence-get">g_sequence_get</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter);void <a class="link" href="glib-Sequences.html#g-sequence-set">g_sequence_set</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> data);<a class="link" href="glib-Basic-Types.html#gboolean">gboolean</a> <a class="link" href="glib-Sequences.html#g-sequence-iter-is-begin">g_sequence_iter_is_begin</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter);<a class="link" href="glib-Basic-Types.html#gboolean">gboolean</a> <a class="link" href="glib-Sequences.html#g-sequence-iter-is-end">g_sequence_iter_is_end</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-iter-next">g_sequence_iter_next</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-iter-prev">g_sequence_iter_prev</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter);<a class="link" href="glib-Basic-Types.html#gint">gint</a> <a class="link" href="glib-Sequences.html#g-sequence-iter-get-position">g_sequence_iter_get_position</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-iter-move">g_sequence_iter_move</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter, <a class="link" href="glib-Basic-Types.html#gint">gint</a> delta);<a class="link" href="glib-Sequences.html#GSequence">GSequence</a>* <a class="link" href="glib-Sequences.html#g-sequence-iter-get-sequence">g_sequence_iter_get_sequence</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *iter);<a class="link" href="glib-Basic-Types.html#gint">gint</a> <a class="link" href="glib-Sequences.html#g-sequence-iter-compare">g_sequence_iter_compare</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *a, <a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *b);<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a>* <a class="link" href="glib-Sequences.html#g-sequence-range-get-midpoint">g_sequence_range_get_midpoint</a> (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *begin, <a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *end);</pre></div><div class="refsect1" lang="en"><a name="id3273630"></a><h2>Description</h2><p>The <a class="link" href="glib-Sequences.html#GSequence"><span class="type">GSequence</span></a> data structure has the API of a list, but isimplemented internally with a balanced binary tree. This means that itis possible to maintain a sorted list of n elements in time O(n logn). The data contained in each element can be either integer values, byusing of the <a class="link" href="glib-Type-Conversion-Macros.html" title="Type Conversion Macros">Type Conversion Macros</a>,or simply pointers to any type of data.</p><p>A <a class="link" href="glib-Sequences.html#GSequence"><span class="type">GSequence</span></a> is accessed through <em class="firstterm">iterators</em>,represented by a <a class="link" href="glib-Sequences.html#GSequenceIter"><span class="type">GSequenceIter</span></a>. An iterator represents a positionbetween two elements of the sequence. For example, the<em class="firstterm">begin</em> iterator represents the gap immediatelybefore the first element of the sequence, and the<em class="firstterm">end</em> iterator represents the gap immediatelyafter the last element. In an empty sequence, the begin and enditerators are the same.</p><p>Some methods on <a class="link" href="glib-Sequences.html#GSequence"><span class="type">GSequence</span></a> operate on ranges of items. For example<a class="link" href="glib-Sequences.html#g-sequence-foreach-range"><code class="function">g_sequence_foreach_range()</code></a> will call a user-specified function on eachelement with the given range. The range is delimited by the gapsrepresented by the passed-in iterators, so if you pass in the beginand end iterators, the range in question is the entire sequence.</p><p>The function <a class="link" href="glib-Sequences.html#g-sequence-get"><code class="function">g_sequence_get()</code></a> is used with an iterator to access theelement immediately following the gap that the iteratorrepresents. The iterator is said to <em class="firstterm">point</em> tothat element.</p><p>Iterators are stable across most operations on a <a class="link" href="glib-Sequences.html#GSequence"><span class="type">GSequence</span></a>. Forexample an iterator pointing to some element of a sequence willcontinue to point to that element even after the sequence issorted. Even moving an element to another sequence using for example<a class="link" href="glib-Sequences.html#g-sequence-move-range"><code class="function">g_sequence_move_range()</code></a> will not invalidate the iterators pointing toit. The only operation that will invalidate an iterator is when theelement it points to is removed from any sequence.</p></div><div class="refsect1" lang="en"><a name="id3273778"></a><h2>Details</h2><div class="refsect2" lang="en"><a name="id3273788"></a><h3><a name="GSequence"></a>GSequence</h3><a class="indexterm" name="id3273800"></a><pre class="programlisting">typedef struct _GSequence GSequence;</pre><p>The <span class="structname">GSequence</span> struct is an opaque data typerepresenting a <a class="link" href="glib-Sequences.html" title="Sequences">Sequence</a> data type.</p></div><hr><div class="refsect2" lang="en"><a name="id3273828"></a><h3><a name="GSequenceIter"></a>GSequenceIter</h3><a class="indexterm" name="id3273841"></a><pre class="programlisting">typedef struct _GSequenceNode GSequenceIter;</pre><p>The <span class="structname">GSequenceIter</span> struct is an opaque datatype representing an iterator pointing into a <a class="link" href="glib-Sequences.html#GSequence"><span class="type">GSequence</span></a>.</p></div><hr><div class="refsect2" lang="en"><a name="id3273870"></a><h3><a name="GSequenceIterCompareFunc"></a>GSequenceIterCompareFunc ()</h3><a class="indexterm" name="id3273882"></a><pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gint">gint</a> (*GSequenceIterCompareFunc) (<a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *a, <a class="link" href="glib-Sequences.html#GSequenceIter">GSequenceIter</a> *b, <a class="link" href="glib-Basic-Types.html#gpointer">gpointer</a> data);</pre><p>A <a class="link" href="glib-Sequences.html#GSequenceIterCompareFunc"><span class="type">GSequenceIterCompareFunc</span></a> is a function used to compareiterators. It must return zero if the iterators compare equal, anegative value if <em class="parameter"><code>a</code></em> comes before <em class="parameter"><code>b</code></em>, and a positive value if <em class="parameter"><code>b</code></em> comesbefore <em class="parameter"><code>a</code></em>.</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><p><span class="term"><em class="parameter"><code>a</code></em> :</span></p></td><td>a <a class="link" href="glib-Sequences.html#GSequenceIter"><span class="type">GSequenceIter</span></a></td></tr>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -