📄 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 + -