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
原文:https://www.cnblogs.com/cainiaoxuexi2017-ZYA/p/14298644.html