Fork me on GitHub

STL——容器(List)List 的概念

1. List 容器的基本概念

1. list 是一个双向链表容器,可高效的进行插入删除元素,他的原理在于每个元素都有两个指针来记录前后两个元素的地址,像火车车厢一样,list 中各个元素在物理存储单元上非连续,是通过指针相连在一起的。

2. 相较于vector的连续线性空间,list会显得复杂许多,他的好处是每次插入或者删除1个元素,就是配置或释放一个元素的空间。

3. list 不可以随机存取元素,所以不支持 at.(position)函数与[]操作符。可以对其迭代器执行++,但是不能这样操作迭代器:it + 3

4. list 采用动态内存分配,不会造成内存的浪费和溢出

5. 链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素

 

2. list 构造函数

1 list<T> lstT;                  //list采用采用模板类实现,对象的默认构造形式
2 list(beg, end);                //构造函数将[beg, end)区间中的元素拷贝给本身
3 list(n, elem);                 //构造函数将n个elem拷贝给本身
4 list(const list & lst);        //拷贝构造函数

 具体用法参考:STL——容器(List)List 的构造函数

 

3. list 的数据元素插入和删除操作

 1 push_back(elem);            //在容器尾部加入一个元素
 2 pop_back();                 //删除容器中最后一个元素
 3 push_front(elem);           //在容器开头插入一个元素
 4 pop_front();                //从容器开头移除第一个元素
 5 insert(pos, elem);          //在pos位置插elem元素的拷贝,返回新数据的位置,是否有返回值是由编译器版本决定
 6 insert(pos, n, elem);       //在pos位置插入n个elem数据,返回新数据的位置,是否有返回值是由编译器版本决定
 7 insert(pos, beg, end);      //在pos位置插入[beg,end)区间的数据,返回新数据的位置,是否有返回值是由编译器版本决定
 8 clear();                    //移除容器的所有数据
 9 erase(beg, end);            //删除[beg,end)区间的数据,返回下一个数据的位置
10 erase(pos);                 //删除pos位置的数据,返回下一个数据的位置
11 remove(elem);               //删除容器中所有与elem值匹配的元素

 具体用法参考:STL——容器(List)List 的数据元素插入和删除操作

 

4. list 的迭代器

1 list.begin();        //返回容器中第一个元素的迭代器。
2 list.end();          //返回容器中最后一个元素之后的迭代器。
3 list.rbegin();       //返回容器中倒数第一个元素的迭代器。
4 list.rend();         //返回容器中倒数最后一个元素的后面的迭代器。
5 list.cbegin();       //返回容器中第一个元素的常量迭代器。
6 list.cend();         //返回容器中最后一个元素之后的常量迭代器。

 具体用法参考:其他几个例子中均有迭代器的使用

 

5. list 的大小操作

1 size();                //返回容器中元素的个数
2 empty();              //判断容器是否为空
3 resize(num);          //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除
4 resize(num, elem);     //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除

 具体用法参考:STL——容器(List)list 的大小操作

 

6. list 的赋值操作

1 assign(beg, end);                        //将[beg, end)区间中的数据拷贝赋值给本身。
2 assign(n, elem);                        //将n个elem拷贝赋值给本身。
3 list & operator=(const list & lst);       //重载等号操作符
4 swap(lst);                                //将lst与本身的元素互换。

 具体用法参考:STL——容器(List)list 的赋值操作

 

7. list 数据的存取

1 front();      //返回第一个元素
2 back();        //返回最后一个元素

 具体用法参考:STL——容器(List)list 数据的存取

 

8. list 翻转排序

1 reverse();            //反转链表,比如lst包含1,3,5元素,运行此方法后,lst就包含5,3,1元素 
2 sort();                //list排序 

 具体用法参考:STL——容器(List)list 的反序排列

 

 

 

 

 

 

=====================================================================================================================

 

posted @ 2020-05-03 23:43  索智源  阅读(250)  评论(0编辑  收藏  举报