📄 qptrlist.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /home/reggie/tmp/qt-3.0-reggie-5401/qt-x11-commercial-3.0.5/doc/qptrlist.doc:41 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Translator" content="Cavendish">
<meta name="Qt zh_CN Documents Website" content="http://www.qiliang.net/qt">
<title>QPtrList类</title>
<style type="text/css"><!--
h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; font-family: "Times New Roman" }
--></style>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr bgcolor="#E5E5E5">
<td valign=center>
<a href="index.html">
<font color="#004faf">主页</font></a>
| <a href="classes.html">
<font color="#004faf">所有的类</font></a>
| <a href="mainclasses.html">
<font color="#004faf">主要的类</font></a>
| <a href="annotated.html">
<font color="#004faf">注释的类</font></a>
| <a href="groups.html">
<font color="#004faf">分组的类</font></a>
| <a href="functions.html">
<font color="#004faf">函数</font></a>
</td>
<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table>
<h1 align=center>QPtrList类参考</h1>
<p>QPtrList类是一个提供双向链表的模板类。
<a href="#details">详情请见……</a>
<p><tt>#include <<a href="qptrlist-h.html">qptrlist.h</a>></tt>
<p>继承了<a href="qptrcollection.html">QPtrCollection</a>。
<p>被<a href="qobjectlist.html">QObjectList</a>、<a href="qsortedlist.html">QSortedList</a>和<a href="qstrlist.html">QStrList</a>继承。
<p><a href="qptrlist-members.html">所有成员函数的列表。</a>
<h2>公有成员</h2>
<ul>
<li><div class=fn><a href="#QPtrList"><b>QPtrList</b></a> ()</div></li>
<li><div class=fn><a href="#QPtrList-2"><b>QPtrList</b></a> ( const QPtrList<type> & list )</div></li>
<li><div class=fn><a href="#~QPtrList"><b>~QPtrList</b></a> ()</div></li>
<li><div class=fn>QPtrList<type> & <a href="#operator-eq"><b>operator=</b></a> ( const QPtrList<type> & list )</div></li>
<li><div class=fn>bool <a href="#operator-eq-eq"><b>operator==</b></a> ( const QPtrList<type> & list ) const</div></li>
<li><div class=fn>virtual uint <a href="#count"><b>count</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isEmpty"><b>isEmpty</b></a> () const</div></li>
<li><div class=fn>bool <a href="#insert"><b>insert</b></a> ( uint index, const type * item )</div></li>
<li><div class=fn>void <a href="#inSort"><b>inSort</b></a> ( const type * item )</div></li>
<li><div class=fn>void <a href="#prepend"><b>prepend</b></a> ( const type * item )</div></li>
<li><div class=fn>void <a href="#append"><b>append</b></a> ( const type * item )</div></li>
<li><div class=fn>bool <a href="#remove"><b>remove</b></a> ( uint index )</div></li>
<li><div class=fn>bool <a href="#remove-2"><b>remove</b></a> ()</div></li>
<li><div class=fn>bool <a href="#remove-3"><b>remove</b></a> ( const type * item )</div></li>
<li><div class=fn>bool <a href="#removeRef"><b>removeRef</b></a> ( const type * item )</div></li>
<li><div class=fn>void <a href="#removeNode"><b>removeNode</b></a> ( QLNode * node )</div></li>
<li><div class=fn>bool <a href="#removeFirst"><b>removeFirst</b></a> ()</div></li>
<li><div class=fn>bool <a href="#removeLast"><b>removeLast</b></a> ()</div></li>
<li><div class=fn>type * <a href="#take"><b>take</b></a> ( uint index )</div></li>
<li><div class=fn>type * <a href="#take-2"><b>take</b></a> ()</div></li>
<li><div class=fn>type * <a href="#takeNode"><b>takeNode</b></a> ( QLNode * node )</div></li>
<li><div class=fn>virtual void <a href="#clear"><b>clear</b></a> ()</div></li>
<li><div class=fn>void <a href="#sort"><b>sort</b></a> ()</div></li>
<li><div class=fn>int <a href="#find"><b>find</b></a> ( const type * item )</div></li>
<li><div class=fn>int <a href="#findNext"><b>findNext</b></a> ( const type * item )</div></li>
<li><div class=fn>int <a href="#findRef"><b>findRef</b></a> ( const type * item )</div></li>
<li><div class=fn>int <a href="#findNextRef"><b>findNextRef</b></a> ( const type * item )</div></li>
<li><div class=fn>uint <a href="#contains"><b>contains</b></a> ( const type * item ) const</div></li>
<li><div class=fn>uint <a href="#containsRef"><b>containsRef</b></a> ( const type * item ) const</div></li>
<li><div class=fn>type * <a href="#at"><b>at</b></a> ( uint index )</div></li>
<li><div class=fn>int <a href="#at-2"><b>at</b></a> () const</div></li>
<li><div class=fn>type * <a href="#current"><b>current</b></a> () const</div></li>
<li><div class=fn>QLNode * <a href="#currentNode"><b>currentNode</b></a> () const</div></li>
<li><div class=fn>type * <a href="#getFirst"><b>getFirst</b></a> () const</div></li>
<li><div class=fn>type * <a href="#getLast"><b>getLast</b></a> () const</div></li>
<li><div class=fn>type * <a href="#first"><b>first</b></a> ()</div></li>
<li><div class=fn>type * <a href="#last"><b>last</b></a> ()</div></li>
<li><div class=fn>type * <a href="#next"><b>next</b></a> ()</div></li>
<li><div class=fn>type * <a href="#prev"><b>prev</b></a> ()</div></li>
<li><div class=fn>void <a href="#toVector"><b>toVector</b></a> ( QGVector * vec ) const</div></li>
</ul>
<h2>重要的继承成员</h2>
<ul>
<li><div class=fn>bool <a href="#autoDelete"><b>autoDelete</b></a> () const</div></li>
<li><div class=fn>void <a href="#setAutoDelete"><b>setAutoDelete</b></a> ( bool enable )</div></li>
</ul>
<h2>保护成员</h2>
<ul>
<li><div class=fn>virtual int <a href="#compareItems"><b>compareItems</b></a> ( QPtrCollection::Item item1, QPtrCollection::Item item2 )</div></li>
<li><div class=fn>virtual QDataStream & <a href="#read"><b>read</b></a> ( QDataStream & s, QPtrCollection::Item & item )</div></li>
<li><div class=fn>virtual QDataStream & <a href="#write"><b>write</b></a> ( QDataStream & s, QPtrCollection::Item item ) const</div></li>
</ul>
<hr><a name="details"></a><h2>详细描述</h2>
QPtrList类是一个提供双向链表的模板类。
<p>
<p>
<p> <a href="qvaluelist.html">QValueList</a>是可以替代这个类的的一个可兼容STL的的选择。
<p> 定义一个模板实例QPtrList<X>就创建了一个操作X(X*)指针的列表。
<p> 这个列表类是可以索引的并且有一个<a href="#at">当前索引</a>和一个<a href="#current">当前项</a>。第一项对应的是索引0。如果当前项为空,则当前索引为-1。
<p> 使用<a href="#prepend">prepend</a>()、<a href="#insert">insert</a>()或<a href="#append">append</a>()可以插入项。可以使用<a href="#remove">remove</a>()、<a href="#removeRef">removeRef</a>()、<a href="#removeFirst">removeFirst</a>()和<a href="#removeLast">removeLast</a>()来移除项。你可以使用<a href="#find">find</a>()、<a href="#findNext">findNext</a>()、<a href="#findRef">findRef</a>()或<a href="#findNextRef">findNextRef</a>()来搜索一个项。列表可以使用<a href="#sort">sort</a>()来排序。你可以使用<a href="#contains">contains</a>()或<a href="#containsRef">containsRef</a>()来得到一个项出现的次数。你也可以使用<a href="#current">current</a>()来得到指向当前项的指针,用<a href="#at">at</a>()来得到一个在特定索引位置的项的指针,用<a href="#getFirst">getFirst</a>()和<a href="#getLast">getLast</a>()来得到第一个或最后一个项的指针。你也可以使用<a href="#first">first</a>()、<a href="#last">last</a>()、<a href="#next">next</a>()和<a href="#prev">prev</a>()(它们都会更新current())来遍历列表。列表的删除属性可以用<a href="qptrcollection.html#setAutoDelete">setAutoDelete</a>()来设置。
<p> <a name="example"></a>
<p> 实例:
<pre>
class Employee
{
public:
Employee() : sn( 0 ) { }
Employee( const <a href="qstring.html">QString</a>& forename, const <a href="qstring.html">QString</a>& surname, int salary )
: fn( forename ), sn( surname ), sal( salary )
{ }
void setSalary( int salary ) { sal = salary; }
<a href="qstring.html">QString</a> forename() const { return fn; }
<a href="qstring.html">QString</a> surname() const { return sn; }
int salary() const { return sal; }
private:
<a href="qstring.html">QString</a> fn;
<a href="qstring.html">QString</a> sn;
int sal;
};
QPtrList<Employee> list;
list.<a href="qptrcollection.html#setAutoDelete">setAutoDelete</a>( TRUE ); // list列表拥有了这个对象
list.<a href="#append">append</a>( new Employee("John", "Doe", 50000) );
list.<a href="#append">append</a>( new Employee("Jane", "Williams", 80000) );
list.<a href="#append">append</a>( new Employee("Tom", "Jones", 60000) );
Employee *employee;
for ( employee = list.<a href="#first">first</a>(); employee; employee = list.<a href="#next">next</a>() )
cout << employee->surname().latin1() << ", " <<
employee->forename().latin1() << " earns " <<
employee->salary() << endl;
cout << endl;
// 对于非常大的列表是很没有效率的
for ( uint i = 0; i < list.<a href="#count">count</a>(); ++i )
if ( list.<a href="#at">at</a>(i) )
cout << list.<a href="#at">at</a>( i )->surname().latin1() << endl;
</pre>
<p> 输出是
<pre>
Doe, John earns 50000
Williams, Jane earns 80000
Jones, Tom earns 60000
Doe
Williams
Jones
</pre>
<p> QPtrList有几个函数可以遍历列表,但是使用<a href="qptrlistiterator.html">QPtrListIterator</a>会更实用。多重列表的迭代器也可以遍历同一个列表,它们之间以及和当前列表项无关。
<p> 在上面的例子中,我们调用<a href="qptrcollection.html#setAutoDelete">setAutoDelete</a>(TRUE)使自动删除生效就是说列表在移除项的时候一起删除它。默认选项是当它们被移除的时候不被删除,但是我们的例子中对没有列表项没有其它的引用,所以如果不这么做的话会导致内存泄漏。
<p> 列表项被作为<tt>void*</tt>存储在内部的QLNode终了,它也保存指向前一个和后一个列表项的指针。<a href="#currentNode">currentNode</a>()、<a href="#removeNode">removeNode</a>()和<a href="#takeNode">takeNode</a>()函数可以直接操作QLNode,但是必须仔细使用它们。节点的数据部分可以使用QLNode::getData()得到。
<p> 当向列表插入一个项的时候,只有指针被复制,而不是项自身,比如,我们做了一个<a href="shclass.html#shallow-copy">浅复制</a>。当一个项被插入时,也是可以让列表复制这个项的所有数据(深复制)。<a href="#insert">insert</a>()、<a href="#inSort">inSort</a>()和<a href="#append">append</a>()在项被插入时调用虚函数<a href="qptrcollection.html#newItem">QPtrCollection::newItem</a>()。如果你想深复制,请继承这个列表并重新实现它。
<p> 当从列表中移除一个项时,虚函数<a href="qptrcollection.html#deleteItem">QPtrCollection::deleteItem</a>()被调用。QPtrList的默认实现是如果自动删除生效,就删除这个项。
<p> 虚函数<a href="#compareItems">compareItems</a>()可以被重新实现用来比较两个列表项。这个函数被所有需要比较列表项的列表函数调用,比如<a href="#remove">remove</a>(const type*)。如果你只想处理指针,又可以替代比较指针的函数,比如<a href="#removeRef">removeRef</a>(const type*)。这些函数比那些调用compareItems()的稍微快些。
<p> <a href="qstrlist-h.html">qstrlist.h</a>中定义的<a href="qstrlist.html">QStrList</a>是一个<tt>char*</tt>的列表。它重新实现了<a href="qptrcollection.html#newItem">newItem</a>()、<a href="qptrcollection.html#deleteItem">deleteItem</a>()和compareItems()。
<p> <p>也可以参考<a href="qptrlistiterator.html">QPtrListIterator</a>、<a href="collection.html">集合类</a>和<a href="tools.html">非GUI类</a>。
<hr><h2>成员函数文档</h2>
<h3 class=fn><a name="QPtrList"></a>QPtrList::QPtrList ()
</h3>
构造一个空的列表。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -