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