<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="css/stdlayout.css" type="text/css">
<link rel="stylesheet" href="css/print.css" type="text/css">
<meta content="text/html; charset=Big5" http-equiv="content-type">
<title>循序容器(QVector、QLinkedList、QList...)</title>
</head>
<body>
<!-- Copyright � 2005. Spidersoft Ltd -->
<style>
A.applink:hover {border: 2px dotted #DCE6F4;padding:2px;background-color:#ffff00;color:green;text-decoration:none}
A.applink {border: 2px dotted #DCE6F4;padding:2px;color:#2F5BFF;background:transparent;text-decoration:none}
A.info {color:#2F5BFF;background:transparent;text-decoration:none}
A.info:hover {color:green;background:transparent;text-decoration:underline}
</style>
<div style='BORDER: 1px solid #DCE6F4; MARGIN-TOP: 20px; MARGIN-BOTTOM: 20px; MARGIN-LEFT: 5px; MARGIN-RIGHT: 5px; PADDING: 5px; BACKGROUND-COLOR: #eef8ff;line-height:180%; COLOR: #000000; font-family: Arial; font-size: 8pt; width=100%; FILTER: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr="#FFFFFFFF", EndColorStr="#F2F5FAFF");'>
This page was saved using <a class="applink" href="http://www.spidersoft.com"><b>WebZIP 7.0.3.1030</b></a> <a class="applink" href="http://www.spidersoft.com"><b>offline browser</b></a> (Unregistered) on 08/17/08 18:06:17.<br>
<b>Address:</b> <a class="info" href="http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/SequentialContainer.html">http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/SequentialContainer.html</a><br>
<b>Title:</b> 循序容器(QVector、QLinkedList、QList...) • <b>Size:</b> 35339 • <b>Last Modified:</b> Thu, 07 Aug 2008 15:41:08 GMT<br></div>
<!-- /Copyright � 2005. Spidersoft Ltd -->
<h3><a href="http://caterpillar.onlyfun.net/Gossip/index.html">From
Gossip@caterpillar</a></h3>
<h1><a href="Qt4Gossip.html">Qt4 Gossip: 循序容器(QVector、QLinkedList、QList...)</a></h1>
<table style="text-align: left; width: 946px; height: 32px;" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="width: 676px; vertical-align: top;"> <small>QVector、
QLinkedList與QList是Qt所提供的幾個常用容器類別。QVector將項目(item)儲存在鄰接的記憶體空間之中,提供基於索引
(index-based)存取方式的容器類別。QLinkedList以鏈結(Linked)的方式儲存項目,提供基於迭代器(iterator-
based)存取方式的容器類別。QList提供基於</small><small>索引的</small><small>快速</small><small>存取容器類別,內部使用指標陣列,可提供快速插入及移除項目。<br>
<br>
首先來看看QVector的基本使用方式,建立一個可容納兩個元素的QVector,並使用索引方式存取元素值:<br>
</small>
<div style="margin-left: 40px;"><small style="font-family: Courier New,Courier,monospace; font-weight: bold;">QVector<double> vect(2);</small><br style="font-family: Courier New,Courier,monospace; font-weight: bold;">
<small style="font-family: Courier New,Courier,monospace; font-weight: bold;">vect[0] = 1.0;</small><br style="font-family: Courier New,Courier,monospace; font-weight: bold;">
<small style="font-family: Courier New,Courier,monospace; font-weight: bold;">vect[1] = 2.0;</small><br style="font-family: Courier New,Courier,monospace; font-weight: bold;">
<small style="font-family: Courier New,Courier,monospace; font-weight: bold;">for (int i = 0; i < vect.count(); ++i) {</small><br style="font-family: Courier New,Courier,monospace; font-weight: bold;">
<small style="font-family: Courier New,Courier,monospace; font-weight: bold;"> cout << vect[i] << endl;</small><br style="font-family: Courier New,Courier,monospace; font-weight: bold;">
<small style="font-family: Courier New,Courier,monospace; font-weight: bold;">}<br>
<br>
</small><small style="font-family: Courier New,Courier,monospace; font-weight: bold;">for (int i = 0; i < vect.count(); ++i) {</small><br style="font-family: Courier New,Courier,monospace; font-weight: bold;">
<small style="font-family: Courier New,Courier,monospace; font-weight: bold;"> cout << vect.at(i) << endl;</small><br style="font-family: Courier New,Courier,monospace; font-weight: bold;">
<small style="font-family: Courier New,Courier,monospace; font-weight: bold;">}</small><br>
</div>
<small><br>
要使用索引方式設定元素,必須先配置好夠長的空間,否則會發生超出索引範圍的錯誤,</small><small>使用[]運算子指定索引存取的方式是比較方便,但在某些場合下,使用at()方法會較有效率一些,這涉及Qt的隱式共享機制,稍後再作介紹。<br>
</small><small></small><small><span class="postbody"><br>
</span></small><small>您也可以使用QVector的append()方法來加入元素,使用remove()方法來移除元素,使用insert()方法來插入元素,例如append()的使用如下:<br>
</small>
<div style="margin-left: 40px;"><small style="font-family: Courier New,Courier,monospace;"><span style="font-weight: bold;">vect.append(3.0);</span></small><br style="font-weight: bold; font-family: Courier New,Courier,monospace;">
<small style="font-family: Courier New,Courier,monospace;"><span style="font-weight: bold;">vect.append(4.0);</span></small><br>
</div>
<small><br>
或者是使用<<運算子附加元素:<br>
</small>
<div style="margin-left: 40px;"><small style="font-family: Courier New,Courier,monospace; font-weight: bold;">vect << 5.0 << 6.0;</small><br>
</div>
<small><br>
QVector也重載了一些其它的運算子,以及提供了一些其它可用的方法,請查詢Qt線上文件有關於QVector的介紹。QVector提供的是鄰接的
記憶體空間以存取物件,所以對於循序存取或使用索引,效率較高,但如果要插入或移除元素時,效率就會低落。QVector的子類別QStack提供了
push()、pop()與top()等方法,方便您進行堆疊結構的物件管理。<br>
<br>
對於需要經常要在容器中插入或移除元件,您可以使用QLinkedList以提高存取效率,它不提供基於索引的存取方式,而是基於迭代器的存取方式,稍後會介紹迭代器的使用,以下先來看看QList。<br>
<br>
QList提供的是基於索引的存取方式,其內部實作使用了指標陣列,陣列中每個指標指向所要儲存的元素,結合了QVector與QLinkedList的
優點,提供快速存取與插入、移除,其索引存取方式或可用的方法與QVector是類似的,也可以使用<<運算子來附加元素,例如:<br>
</small>
<div style="margin-left: 40px;"><small style="font-family: Courier New,Courier,monospace; font-weight: bold;">QList<QString> list;</small><br style="font-family: Courier New,Courier,monospace; font-weight: bold;">
<small style="font-family: Courier New,Courier,monospace; font-weight: bold;">list << "caterpillar" << "momor" << "bush";<br>
<br style="f