STL list

一、概述
list是一个双向链表,空间不再连续,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。
list迭代器必须由能力指向list的节点,进行正确的递增,递减,取值,成员存取等操作。
List有一个重要的性质:插入(insert),接洽(splice) 和删除(erase)都不会造成原有的list迭代器失效。这在vector是不成立的,因为vector的插入操作可能造成记忆体重新配置,导致原来的迭代器全部失效。
slist是单链表,具有list同样重要的性质。根据STL习惯,插入操作将新元素插入指定位置之前,而非之后,然而作为一个单向链表,slist无法方便回头定为前一个位置,因此必须从头找起。除了slist的起点附近的区域外,在其他位置采用insert或erase操作函数都是不明智之举。为此,slist特别提供了insert_after和erase_after方法。

二、插入元素
   1.实例化一个整形list后,可以使用成员方法push_front把元素插在链表开头。
     list listSID; 
     listSID.push_front(8);
     listSID.push_front(11);
     listSID.push_front(65);
     // 65 11 8

   2.使用成员方法push_back把元素插在链表末尾。 

     list listSID; 
     listSID.push_back(8);
     listSID.push_back(11);
     listSID.push_back(65);
     // 8 11 65
     3.使用insert函数可以插入到任意位置,有三个重载版本
     初始链表: 8 11 65
     // a.指定位置插入值
     listSID.insert(listSID.end(), 25); // 8 11 65  25
     // b.在指定位置插入多个值
     listSID.insert(vecArray.begin(), 2, 45); // 45 45  8 11 65  25
     // c.Insert 2 elements from another container in position[1]
     list listAnother(2, 30);
     listSID.insert(listSID.end(), listAnother.begin(), listAnother.end());
     // 45 45  8 11 65  25 45 45
三、删除元素     
    使用erase成员函数,有两个重载版本:一个是接手迭代器参数并删除迭代器指向的元素;一个是接受两个迭代器参数并删除指定范围内的所有元素。
     list listSID; 
     list ::iterator it = listSID.push_back(8);
     listSID.push_back(11);
     listSID.push_back(65);
     listSID.push_back(45);
     listSID.erase(it);
     // 11 65 45
     listSID.erase(listSID.begin(), listSID.begin() + 2);
     // 45
四、反转
    list成员方法reverse()可以反转list元素的排列顺序
    // 0 1 2 3
    listSID.reverse()
    // 3 2 1 0
五、排序   
   list成员方法sort()有两个版本:一个是没有参数,一个是接受一个二元谓词函数作为参数,将根据该谓词指定的标准进行排序。list默认是通过std:less调用运算符<对元素进行比较,以便将元素重新排序。当然也可以向list::sort提供一个二元谓词作为参数。二元谓词是一个函数,他接受两个输入值,并返回一个布尔值指出第一个值是否比第二个值小。
 
六、Q&A
   1.list为何提供诸如sort和remove等成员函数
     答:STL list类需要确保指向list中元素的迭代器始终有效,而不管如何在list中移动该元素。虽然STL算法也可用于list,但list的成员函数可确保list的上述特征即使将list排序后,指向list中元素的迭代器仍指向原来的元素。
   2.使用存储People对象的list时,为让list的成员函数能够正常处理People对象,应该为People类实现哪些运算符?
     答:必须为它实现默认比较运算符==和<。重载sort方法。  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值