?? qvaluelist.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/qvaluelist.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>QValueList類</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>QValueList類參考</h1>
<p>QValueList類是一個提供雙向鏈表的基于值的模板類。
<a href="#details">詳情請見……</a>
<p><tt>#include <<a href="qvaluelist-h.html">qvaluelist.h</a>></tt>
<p>被<a href="qcanvasitemlist.html">QCanvasItemList</a>、<a href="qstringlist.html">QStringList</a>和<a href="qvaluestack.html">QValueStack</a>繼承。
<p><a href="qvaluelist-members.html">所有成員函數的列表。</a>
<h2>公有成員</h2>
<ul>
<li><div class=fn>typedef QValueListIterator<T> <a href="#iterator"><b>iterator</b></a></div></li>
<li><div class=fn>typedef QValueListConstIterator<T> <a href="#const_iterator"><b>const_iterator</b></a></div></li>
<li><div class=fn>typedef T <a href="#value_type"><b>value_type</b></a></div></li>
<li><div class=fn>typedef value_type * <a href="#pointer"><b>pointer</b></a></div></li>
<li><div class=fn>typedef const value_type * <a href="#const_pointer"><b>const_pointer</b></a></div></li>
<li><div class=fn>typedef value_type & <a href="#reference"><b>reference</b></a></div></li>
<li><div class=fn>typedef const value_type & <a href="#const_reference"><b>const_reference</b></a></div></li>
<li><div class=fn>typedef size_t <a href="#size_type"><b>size_type</b></a></div></li>
<li><div class=fn><a href="#QValueList"><b>QValueList</b></a> ()</div></li>
<li><div class=fn><a href="#QValueList-2"><b>QValueList</b></a> ( const QValueList<T> & l )</div></li>
<li><div class=fn><a href="#QValueList-3"><b>QValueList</b></a> ( const std::list<T> & l )</div></li>
<li><div class=fn><a href="#~QValueList"><b>~QValueList</b></a> ()</div></li>
<li><div class=fn>QValueList<T> & <a href="#operator-eq"><b>operator=</b></a> ( const QValueList<T> & l )</div></li>
<li><div class=fn>QValueList<T> & <a href="#operator-eq-2"><b>operator=</b></a> ( const std::list<T> & l )</div></li>
<li><div class=fn>bool <a href="#operator-eq-eq-2"><b>operator==</b></a> ( const std::list<T> & l ) const</div></li>
<li><div class=fn>bool <a href="#operator-eq-eq"><b>operator==</b></a> ( const QValueList<T> & l ) const</div></li>
<li><div class=fn>bool <a href="#operator!-eq"><b>operator!=</b></a> ( const QValueList<T> & l ) const</div></li>
<li><div class=fn>iterator <a href="#begin-2"><b>begin</b></a> ()</div></li>
<li><div class=fn>const_iterator <a href="#begin"><b>begin</b></a> () const</div></li>
<li><div class=fn>iterator <a href="#end"><b>end</b></a> ()</div></li>
<li><div class=fn>const_iterator <a href="#end-2"><b>end</b></a> () const</div></li>
<li><div class=fn>iterator <a href="#insert"><b>insert</b></a> ( iterator it, const T & x )</div></li>
<li><div class=fn>uint <a href="#remove-2"><b>remove</b></a> ( const T & x )</div></li>
<li><div class=fn>void <a href="#clear"><b>clear</b></a> ()</div></li>
<li><div class=fn>QValueList<T> & <a href="#operator-lt-lt"><b>operator<<</b></a> ( const T & x )</div></li>
<li><div class=fn>size_type <a href="#size"><b>size</b></a> () const</div></li>
<li><div class=fn>bool <a href="#empty"><b>empty</b></a> () const</div></li>
<li><div class=fn>void <a href="#push_front"><b>push_front</b></a> ( const T & x )</div></li>
<li><div class=fn>void <a href="#push_back"><b>push_back</b></a> ( const T & x )</div></li>
<li><div class=fn>iterator <a href="#erase"><b>erase</b></a> ( iterator it )</div></li>
<li><div class=fn>iterator <a href="#erase-2"><b>erase</b></a> ( iterator first, iterator last )</div></li>
<li><div class=fn>reference <a href="#front"><b>front</b></a> ()</div></li>
<li><div class=fn>const_reference <a href="#front-2"><b>front</b></a> () const</div></li>
<li><div class=fn>reference <a href="#back"><b>back</b></a> ()</div></li>
<li><div class=fn>const_reference <a href="#back-2"><b>back</b></a> () const</div></li>
<li><div class=fn>void <a href="#pop_front"><b>pop_front</b></a> ()</div></li>
<li><div class=fn>void <a href="#pop_back"><b>pop_back</b></a> ()</div></li>
<li><div class=fn>void <a href="#insert-2"><b>insert</b></a> ( iterator pos, size_type n, const T & x )</div></li>
<li><div class=fn>QValueList<T> <a href="#operator+"><b>operator+</b></a> ( const QValueList<T> & l ) const</div></li>
<li><div class=fn>QValueList<T> & <a href="#operator+-eq"><b>operator+=</b></a> ( const QValueList<T> & l )</div></li>
<li><div class=fn>iterator <a href="#fromLast-2"><b>fromLast</b></a> ()</div></li>
<li><div class=fn>const_iterator <a href="#fromLast"><b>fromLast</b></a> () const</div></li>
<li><div class=fn>bool <a href="#isEmpty"><b>isEmpty</b></a> () const</div></li>
<li><div class=fn>iterator <a href="#append"><b>append</b></a> ( const T & x )</div></li>
<li><div class=fn>iterator <a href="#prepend"><b>prepend</b></a> ( const T & x )</div></li>
<li><div class=fn>iterator <a href="#remove"><b>remove</b></a> ( iterator it )</div></li>
<li><div class=fn>T & <a href="#first"><b>first</b></a> ()</div></li>
<li><div class=fn>const T & <a href="#first-2"><b>first</b></a> () const</div></li>
<li><div class=fn>T & <a href="#last"><b>last</b></a> ()</div></li>
<li><div class=fn>const T & <a href="#last-2"><b>last</b></a> () const</div></li>
<li><div class=fn>T & <a href="#operator[]-2"><b>operator[]</b></a> ( size_type i )</div></li>
<li><div class=fn>const T & <a href="#operator[]"><b>operator[]</b></a> ( size_type i ) const</div></li>
<li><div class=fn>iterator <a href="#at-2"><b>at</b></a> ( size_type i )</div></li>
<li><div class=fn>const_iterator <a href="#at"><b>at</b></a> ( size_type i ) const</div></li>
<li><div class=fn>iterator <a href="#find"><b>find</b></a> ( const T & x )</div></li>
<li><div class=fn>const_iterator <a href="#find-2"><b>find</b></a> ( const T & x ) const</div></li>
<li><div class=fn>iterator <a href="#find-3"><b>find</b></a> ( iterator it, const T & x )</div></li>
<li><div class=fn>const_iterator <a href="#find-4"><b>find</b></a> ( const_iterator it, const T & x ) const</div></li>
<li><div class=fn>int <a href="#findIndex"><b>findIndex</b></a> ( const T & x ) const</div></li>
<li><div class=fn>size_type <a href="#contains"><b>contains</b></a> ( const T & x ) const</div></li>
<li><div class=fn>size_type <a href="#count"><b>count</b></a> () const</div></li>
<li><div class=fn>QValueList<T> & <a href="#operator+-eq-2"><b>operator+=</b></a> ( const T & x )</div></li>
<li><div class=fn>typedef QValueListIterator<T> <a href="#Iterator"><b>Iterator</b></a></div></li>
<li><div class=fn>typedef QValueListConstIterator<T> <a href="#ConstIterator"><b>ConstIterator</b></a></div></li>
</ul>
<h2>相關函數</h2>
<ul>
<li><div class=fn>QDataStream & <a href="#operator-gt-gt"><b>operator>></b></a> ( QDataStream & s, QValueList<T> & l )</div></li>
<li><div class=fn>QDataStream & <a href="#operator-lt-lt-2"><b>operator<<</b></a> ( QDataStream & s, const QValueList<T> & l )</div></li>
</ul>
<hr><a name="details"></a><h2>詳細描述</h2>
QValueList類是一個提供雙向鏈表的基于值的模板類。
<p>
<p> QValueList是一個像STL一樣的列表容器的Qt的實現。如果標準<tt>列表</tt>不能提供時,你可以在你的應用程序中使用它。QValueList是<a href="qtl.html">Qt模板庫</a>的一部分。
<p> QValueList<T>定義了一個創建了一個全部為類T的值的列表的一個模板實例。注意QValueList不是存儲指針為列表的成員,它保存每個成員的復制。這也就是為什么這些類被稱為“基于值”,而<a href="qptrlist.html">QPtrList</a>和<a href="qdict.html">QDict</a>是“基于指針”。
<p> QValueList包含并管理一個類型為T的對象的集合并且提供允許找到被包含的對象的迭代器。QValueList擁有它的項。關于更多的所有權語義,請參考<a href="qptrcollection.html">QPtrCollection</a>和其它一些基于指針的容器類。
<p> 一些類不能在QValueList中使用,例如,所有繼承于<a href="qobject.html">QObject</a>的類和那些所有實現窗口部件的類。只有值可以用在QValueList中。一個類作為值必須提供以下幾點:
<p> <ul>
<li> 一個復制構造函數
<li> 一個賦值操作符
<li> 一個默認構造函數,比如構造函數中沒有使用任何參數。
</ul>
<p> 注意在沒有明確的版本被提供的時候,C++默認實現操作符和復制函數。在很多情況下,這就足夠了。
<p> QValueList的函數命名和其它Qt類是一致的(比如,<a href="#count">count</a>()、<a href="#isEmpty">isEmpty</a>())。QValueList也提供兼容STL算法的一些函數,比如<a href="#size">size</a>()和<a href="#empty">empty</a>()。已經熟悉STL的<tt>list</tt>的程序員也可以使用這些函數。
<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)
{}
<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; }
void setSalary( int salary ) { sal = salary; }
private:
<a href="qstring.html">QString</a> fn;
<a href="qstring.html">QString</a> sn;
int sal;
};
typedef QValueList<Employee> EmployeeList;
EmployeeList list;
list.append( Employee("John", "Doe", 50000) );
list.append( Employee("Jane", "Williams", 80000) );
list.append( Employee("Tom", "Jones", 60000) );
Employee mary( "Mary", "Hawthorne", 90000 );
list.append( mary );
mary.setSalary( 100000 );
EmployeeList::<a href="#iterator">iterator</a> it;
for ( it = list.begin(); it != list.end(); ++it )
cout << (*it).surname().latin1() << ", " <<
(*it).forename().latin1() << " earns " <<
(*it).salary() << endl;
// 輸出:
// Doe, John earns 50000
// Williams, Jane earns 80000
// Hawthorne, Mary earns 90000
// Jones, Tom earns 60000
</pre>
<p> 注意最后對Mary的薪水的改變并沒有影響列表中的值,這是因為列表中創建了一個Mary條目的復制。
<p> 這里有幾種方法在列表中找到項。<a href="#begin">begin</a>()和<a href="#end">end</a>()函數返回列表中開始和結尾的迭代器。迭代器的優點是你可以通過對迭代器加/減就可以實現從當前位置向前/后移動了。end()返回的迭代器指向的是容器中最后一個之后的值。結尾之后的迭代器也是和列表關聯的,它屬于列表,盡管它是<em>不</em>可以解除引用的,<a href="qwmatrix.html#operator*-5">operator*</a>()不能返回一個被良好定義的值。如果列表是空的(<a href="#empty">empty</a>()),begin()和end()返回的值一樣。
<p> 另一個在列表中找到項的方法是使用<a href="qtl.html#qFind">qFind()</a>算法。比如:
<p> <pre>
QValueList<int> list;
...
QValueList<int>::<a href="#iterator">iterator</a> it = qFind( list.<a href="#begin">begin</a>(), list.<a href="#end">end</a>(), 3 );
if ( it != list.<a href="#end">end</a>() )
// it指向被找到的項。
</pre>
<p> 同一時間在列表中使用多個迭代器是安全的。如果列表中的一些成員被移除,只有那些指向被移除的成員的迭代器變為無效。向列表中插入項不會使任何一個迭代器無效。為了方便,函數<a href="#last">last</a>()返回列表中最后一個項的引用,并且<a href="#first">first</a>()返回第一個項的引用。如果列表為空(empty()),last()和first()都會有未定義的行為發生(你的應用程序將會崩潰或者會做一些不可預知的事情)。使用last()和first()時需要注意,比如:
<p> <pre>
QValueList<int> list;
list.<a href="#append">append</a>( 1 );
list.<a href="#append">append</a>( 2 );
list.<a href="#append">append</a>( 3 );
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -