C++:3.0 資料結構(1):list容器
阿新 • • 發佈:2021-01-19
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; // 初始化一個list11 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