1. 程式人生 > 實用技巧 >C++:3.0 資料結構(1):list容器

C++:3.0 資料結構(1):list容器

1. 定義:

  list是一種序列式容器。

  每一個節點都包含三個域:前驅元素指標域(指向前一個元素的指標)、後驅元素指標域(指向後一個元素的指標)、資料。

  同時,頭節點的前驅指標指向尾節點,尾節點的後繼指標指向頭結點。這一特性與迴圈連結串列又相同。

  因此,list就構成了一個雙向迴圈鏈。

  由於list的用的是指標,因此在儲存空間上,它並不需要分配連續的記憶體,但同時由於記憶體的不連續性,因此list也不支援快速隨即讀取。如果使用迭代器,則只能通過“++”或“--”的方式,將迭代器前移或後移。

  list沒有備份空間的概念,出入一個元素就申請一個元素的空間,所以他的迭代器不會失效。

  相比,vector會保留備份空間,在超過容量額度時會重新全部分配記憶體,導致迭代器失效。

2. 程式碼說明:

 1 #include<iostream>
 2 #include<vector>
 3 #include<list>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     vector<int> v;                // 初始化一個vector
10     list<int> l;                     // 初始化一個list
11 12 /*往空vector和list中新增元素*/ 13 for (int i = 0; i<8; i++) // 新增元素 14 { 15 v.push_back(i); 16 l.push_back(i); 17 } 18 19 /*針對list l, 使用迭代器遍歷輸出*/ 20 for(list<int>::const_iterator iter = l.begin(); iter != l.end(); iter++) 21 { 22 cout<<*iter;
23 } 24 25 cout<<endl; 26 }

3. 其他:

  1)const_iterator和const iterator的區別?

    答:即指標常量和常量指標的區別,

const_iterator是宣告iterator指向的物件是常量,迭代器本身可以變,但指向的物件不能變。

const iterator是宣告iterator是常量,表示迭代器本身不能變,但指向的物件可以變。

參考部落格:

  http://www.360doc.com/content/12/1125/21/1200324_250198822.shtml

  https://blog.csdn.net/Genius_LG/article/details/8594984

  http://www.cppcns.com/ruanjian/c/192644.html