STL常用容器用法之——List

来源:互联网 发布:供应商主数据 编辑:程序博客网 时间:2024/05/22 07:51

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



原创粉丝点击