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

posted @ 2021-01-19 17:15  张幼安  阅读(180)  评论(0编辑  收藏  举报