STL常用容器用法之——List

  • Post author:
  • Post category:其他


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);                                                    //互换



版权声明:本文为u010864559原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。