STL list

15 篇文章 0 订阅
1.list是一个双向链表,他支持双向迭代器,但不支持随机访问迭代器.


2.定义


template <
   class Type, 
   class Allocator=allocator<Type> 
>
class list




3.对于list来说当我们进行删除,添加等操作并不一定会对迭代器进行影响(尤其是不影响begin和end)。所以这跟vector不一样。
  对于list来说无论进行如何的删除他的end都是不变的。而begin则有可能会边




3.特别函数


(1). 删除指定的元素或者满足条件的元素


void remove(
   const Type& _Val
);   //删除等于_Val的所有元素。这个函数不同于算法的remove,成员函数会删除元素以及分配的内存


template<class Predicate>
void remove_if(
   Predicate _Pred    //函数对象,跟算法remove_if的定义相同
)




(2).反转所有元素
void reverse( );


(3).容器的排序


void sort( );   //元素必须实现<操作符(这跟算法sort不同), 当两个元素比较返回为true时,则左边排前边,右边的排后边


template<class Traits> 
   void sort(
      Traits _Comp    //函数对象, 两个元素做参数,返回true时则左边排前面,右边参数排后面
   );




(4).元素的成批插入(结合)(注意这跟insert函数中的_Where是不同的,insert是从这个位置开始,而本函数是放在前面)


void splice(
   iterator _Where,    //将_Right中的所有元素都插入到目标的_Where的前面
   list<Allocator>& _Right  
);


//若是_Right与目标是相同的分配器则只是内部指针的调整,并不会析构_Right中的所以元素,但_Right中是不会再有元素了
//若_Right与目标不是相同的分配器,则是一个个的插入到_Where前,并且会销毁_Right这个list


void splice(
   iterator _Where,
   list<Allocator>& _Right,
   iterator _First   //指定从_Right中的开始位置
);
void splice(
   iterator _Where,
   list<Allocator>& & _Right,
   iterator _First,
   iterator _Last        //指定从_Right中的开始和结束位置
);




(5).若相邻的两个元素相等或者满足指定条件,则删除后面那个元素(这个函数只确保相邻无重复,并不代表整个无重复)


void unique( );
template<class BinaryPredicate>
   void unique(
      BinaryPredicate _Pred   //函数对象, 若函数返回true,则删除后面参数的元素
   );


函数原形:  bool Fn(const TYPE& e1, const TYPE&e2)   //若e1,e2满足指定条件则删除e2






(6).将源list中的所有元素合并到目标中并删除源,合并和splice不同的是spice只是将元素插入到指定位置的前面,而merge不是单纯的插入。而是源将按 <比较的顺序插入目标的适当位置。 即源的第一个比较目标的第一个,若源小于目标则源放在目标的前面,而大于则目标继续下一个。


void merge(
   list<Type, Allocator>& _Right           //元素必须实现<操作,且源在左边目标在右边,若源小于目标则源插入目标的前面
);
template<class Traits>
   void merge(
      list<Type, Allocator>& _Right, 
      Traits _Comp         //函数对象, 同样两个参数,源在前面,目标在后面,若函数调用返回true,则将源插入到目标的前面
   );


函数原形:  bool Fn(const TYPE& src, const TYPE& dest)  


merge调用后源将被清空.


例:


10, 2, 44, 23
20, 3, 35
合并的结果为: 10, 2, 20, 3, 35, 44, 23




这个函数调用一般是用在两个有序的链表的合并






(7).insert,erase函数的返回


iterator insert(
   iterator _Where,   //增加并插入到指定位置的前面, 若元素为空而这个参数为begin()时则函数调用后将会返回新的begin了而不能用原来的begin了,若不为
                      //begin则函数调用后begin不会变
   const Type& _Val
);  //函数返回新插入元素所在的迭代器


void insert(
   iterator _Where,   //将_Count插入_Where的前面
   size_type _Count,
   const Type& _Val
);


template<class InputIterator>
   void insert(
      iterator _Where,
      InputIterator _First,
      InputIterator _Last
   );




iterator erase(
   iterator _Where   //删除指定位置元素,并返回下一个元素的迭代, 这里不能是end()。而当删除begin()后begin将会改变否则不会改变
);


iterator erase(
   iterator _First,
   iterator _Last
);   //这里实际就是返回_Last























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值