?? 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">函數(shù)</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">所有成員函數(shù)的列表。</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>就創(chuàng)建了一個操作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>()來得到一個項出現(xiàn)的次數(shù)。你也可以使用<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有幾個函數(shù)可以遍歷列表,但是使用<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>()函數(shù)可以直接操作QLNode,但是必須仔細使用它們。節(jié)點的數(shù)據(jù)部分可以使用QLNode::getData()得到。
<p> 當向列表插入一個項的時候,只有指針被復制,而不是項自身,比如,我們做了一個<a href="shclass.html#shallow-copy">淺復制</a>。當一個項被插入時,也是可以讓列表復制這個項的所有數(shù)據(jù)(深復制)。<a href="#insert">insert</a>()、<a href="#inSort">inSort</a>()和<a href="#append">append</a>()在項被插入時調用虛函數(shù)<a href="qptrcollection.html#newItem">QPtrCollection::newItem</a>()。如果你想深復制,請繼承這個列表并重新實現(xiàn)它。
<p> 當從列表中移除一個項時,虛函數(shù)<a href="qptrcollection.html#deleteItem">QPtrCollection::deleteItem</a>()被調用。QPtrList的默認實現(xiàn)是如果自動刪除生效,就刪除這個項。
<p> 虛函數(shù)<a href="#compareItems">compareItems</a>()可以被重新實現(xiàn)用來比較兩個列表項。這個函數(shù)被所有需要比較列表項的列表函數(shù)調用,比如<a href="#remove">remove</a>(const type*)。如果你只想處理指針,又可以替代比較指針的函數(shù),比如<a href="#removeRef">removeRef</a>(const type*)。這些函數(shù)比那些調用compareItems()的稍微快些。
<p> <a href="qstrlist-h.html">qstrlist.h</a>中定義的<a href="qstrlist.html">QStrList</a>是一個<tt>char*</tt>的列表。它重新實現(xiàn)了<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>成員函數(shù)文檔</h2>
<h3 class=fn><a name="QPtrList"></a>QPtrList::QPtrList ()
</h3>
構造一個空的列表。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -