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是常量,表示迭代器本身不能變,但指向的對象可以變。