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