STL常用容器用法之——List

List简介

 list是一个双向链表容器,可高效地进行插入删除元素。

list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符。迭代器It++(ok) it+5(err)

#include <list>  

1、list头尾的添加移除操作

list.push_back(elem);            //在容器尾部加入一个元素

list.pop_back();              //删除容器中最后一个元素

list.push_front(elem);     //在容器开头插入一个元素

list.pop_front();             //从容器开头移除第一个元素

 list.front();   //返回第一个元素。

 list.back();  //返回最后一个元素。


例:

list<int>lstInt;

         lstInt.push_back(1);

         lstInt.push_back(3);

         lstInt.push_back(5);

         lstInt.push_back(7);

         lstInt.push_back(9);

 

         intiFront = lstInt.front(); //1

         intiBack = lstInt.back();            //9

         lstInt.front()= 11;                      //11

         lstInt.back()= 19;                       //19

2、list与迭代器

list.begin();                    //返回容器中第一个元素的迭代器。

list.end();                      //返回容器中最后一个元素之后的迭代器。

 list.rbegin();         //返回容器中倒数第一个元素的迭代器。

 list.rend();         //返回容器中倒数最后一个元素的后面的迭代器。

//list不能随机访问
it = l.begin();
it ++;
it ++ ;
it ++ ;
//it = it + 5;  //不支持随机的访问容器

3、list的插入

list.insert(pos,elem);   //在pos位置插入一个elem元素的拷贝,返回新数据的位置。

list.insert(pos,n,elem);   //在pos位置插入n个elem数据,无返回值。

list.insert(pos,beg,end);   //在pos位置插入[beg,end)区间的数据,无返回值。


list<int> lstA;

         list<int>lstB;

 

         lstA.push_back(1);

         lstA.push_back(3);

         lstA.push_back(5);

         lstA.push_back(7);

         lstA.push_back(9);

 

         lstB.push_back(2);

         lstB.push_back(4);

         lstB.push_back(6);

         lstB.push_back(8);

 

         lstA.insert(lstA.begin(),11);             //{11, 1, 3, 5, 7, 9}

         lstA.insert(++lstA.begin(),2,33);               //{11,33,33,1,3,5,7,9}

         lstA.insert(lstA.begin(), lstB.begin() , lstB.end() ); //{2,4,6,8,11,33,33,1,3,5,7,9}

4、list的删除

 list.clear();          //移除容器的所有数据

list.erase(beg,end);  //删除[beg,end)区间的数据,返回下一个数据的位置。

list.erase(pos);    //删除pos位置的数据,返回下一个数据的位置。

lst.remove(elem);   //删除容器中所有与elem值匹配的元素。

 

例:

// l {0 1 2 3 4 5}

list<int>::iterator it1 = l.begin();
list<int>::iterator it2 = l.begin();
it2 ++ ;
it2 ++ ;
it2 ++ ;
l.erase(it1, it2); // 3 4 5

l.erase(l.begin()); // 4 5
l.remove(5); // 4

5 、list的赋值

list.assign(beg,end);    //将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。

 list.assign(n,elem);  //将n个elem拷贝赋值给本身。

list& operator=(const list &lst);         //重载等号操作符

list.swap(lst);  // 将lst与本身的元素互换。

例:

list<int>lstIntA,lstIntB,lstIntC,lstIntD;

         lstIntA.push_back(1);

         lstIntA.push_back(3);

         lstIntA.push_back(5);

         lstIntA.push_back(7);

         lstIntA.push_back(9);

 

         lstIntB.assign(lstIntA.begin(),lstIntA.end());           //1 3 5 7 9

         lstIntC.assign(5,8);                                                         //8 8 8 8 8

         lstIntD= lstIntA;                                                              //13 5 7 9

         lstIntC.swap(lstIntD);                                                    //互换



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STL,全称为Standard Template Library,是C++标准库中的一部分,包含了许多常用的算法和数据结构实现。《STL源码剖析》是一本对STL源码进行深入解读和剖析的经典著作,其简体中文版对于广大C++程序员来说是非常实用和重要的参考资料。 本书分为六个部分。第一部分介绍了一些STL的基本概念和编程技巧,如迭代器、容器、算法等。第二部分讲解了STL的6个容器类型,包括vector、deque、list、set、map和hash_table。第三部分介绍了STL中的算法,其中涵盖了非常基础的排序、查找、拷贝、替换等操作,以及涉及到了迭代器和函数对象等高级内容。第四部分是有关迭代器的各种细节,包括iterator、reverse_iterator、const_iterator、const_reverse_iterator等。第五部分则主要讲解了仿函数的概念与应用,以及STL中提供的各种内置函数对象。最后一部分是STL的内部实现,作者为大家深入浅出地讲解了STL的各个组件如何实现、构造和优化。 本书的特点是结合许多例子和注释进行讲解,既有理论又有实践,让C++程序员能够深入了解和掌握STL的实现原理。此外,本书也对UNIX和Windows平台下的STL源码进行了比较和分析,对不同平台下的STL源码进行了对比,使读者能够很好地理解STL的跨平台兼容性。 总之,《STL源码剖析》简体中文版是一本非常精彩的书籍,对于学习和研究C++标准库的程序员来说是一本非常实用的参考资料。 ### 回答2: STL(标准模板库)是C++编程语言中的一个重要工具,它提供了一些基础的数据结构和算法的实现,为程序员提供了方便和便捷的工具,同时也促进了C++程序的效率和可读性。 STL源码剖析简体中文版是一本专门介绍STL库源码的书籍。本书对STL的各个组成部分——如容器、迭代器、算法等——进行了详细的分析和解释,并用通俗易懂的语言和大量的实例帮助读者深入理解和掌握STL的内部实现。 在本书中,作者首先介绍了STL的概念和基本特性,然后逐步深入讲解各个模块的实现原理:容器的底层实现、迭代器的种类和应用、算法的实现方法等。特别值得一提的是,本书还包含了对常见算法的性能测试和比较,使读者可以更加清晰地了解每个算法的使用场景和优缺点。 本书的作者是STL的专家之一,他在对STL库进行研究和开发的过程中积累了丰富的经验和知识。他用简洁明了的语言和生动的实例解释了STL的各个模块的实现原理,使读者可以更加深入地理解和熟练掌握STL的使用方法。 总之,《STL源码剖析简体中文版》是一本非常优秀的STL教材,对于想要深入学习和掌握STL库的C++程序员来说,是一本不可多得的好书。 ### 回答3: STL(标准模板库)是C++中的一个重要部分,是由许多通用数据结构和算法组成的模板库。STL提供了一组模板类,包括向量、列表、哈希表、堆、映射等,以及与之相关的一系列算法,例如排序、查找和合并等。 《STL源码剖析》是一本介绍STL实现细节的书籍,它深入探讨了STL的实现原理、内部数据结构以及概述了STL库的各个组件。本书分为四个部分,分别是基础篇、容器篇、迭代器篇、算法篇,涵盖了STL库的方方面面。 基础篇介绍了STL的起源和设计思路,还介绍了STL各个组件之间的关系。容器篇主要介绍了STL提供的容器类,包括vector、list、set、map等常见的数据结构的内部实现和应用,以及容器的迭代器的使用方法。迭代器篇主要介绍了各种迭代器的使用方法,包括输入、输出、正向、双向和随机访问迭代器等。算法篇则介绍了STL提供的各种算法,包括排序、查找、复制、替换、合并等。 总体来说,《STL源码剖析》简体中文版是一本很好的探索STL内部实现的书籍。通过研究STL源码的实现原理,可以更好地理解C++编程语言的特性和其底层机制,从而更好地应用C++开发高质量的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值