STL学习记录(六):List

STL顺序容器List

List简介

List容器通过双向链表的形式来管理容器里的元素。这种方式表明他与Vector、Deque容器的不同。首先List不支持元素的随机访问,例如:你要访问第五个元素你必须先访问之前的四个。其次List的插入和移除操作更快。因为不需要移动元素它在任意位置的插入和移除操作的时间复杂度是常量。下面是List的常见操作:

迭代器

操作说明
list.begin( )返回list的第一个元素的双向迭代器
list.end( )返回list的最后一个元素之后位置的双向迭代器
list.cbegin( )返回list的第一个元素的const型双向迭代器
list.cend( )返回list的最后一个元素之后位置的const型双向迭代器
list.rbegin( )返回list逆序的第的第一个元素的反向迭代器
list.rend( )返回list逆序的最后一个元素的反向迭代器
list.crbegin( )返回list逆序的第一个元素的const型反向迭代器
list.crend( )返回list逆序的最后一个元素的const型反向迭代器

容量

操作说明
list.size( )返回list里面元素的个数
list.empty( )判断list是否为空
list.max_size( )返回list的最大的容量

直接访问

操作说明
list.front( )返回第一个元素(不检查该元素是否存在)
list.back( )返回最后一个元素(不检查该元素是否存在)

赋值类

操作说明
swap(list1,list2)交换list1list2 数据
list1.swap(list2)交换list1与list中的所有数据
list.assign(n,elem)n个元素elem的拷贝赋值给list
list.assign(beg,end)将[beg,end)范围内的元素赋值给list
list.assign({*x1,x2,……})将初始化列表中的所有元素都赋值给list

修改类

操作说明
list.clear( )删除list中的所有元素
list.erase(pos)删除位于pos的元素
list.erase(beg,end)删除位于[beg,end)之间的元素
list.resize(num)重置list的大小,若list变大则新增元素使用该元素默认构造函数构造
list.resize(num,elem)重置list的大小,若list变大则新增元素使用elem 的拷贝
list.remove(val)移除所有值为val的元素
list.remove_if(op)移除listh中元素经过op后为true的所有元素
list.push_back(elem)elem加到list的末尾
list.push_front(elem)elem加到list的前面
list.pop_back( )移除list中的最后一个元素(不是返回该值)
list.pop_front( )移除list中的第一个元素(不是返回该值)
list.insert(pos,elem)pos之前插入elem的拷贝并返回该元素的位置
list,insert(pos,n,elem)pos之前插入nelem的拷贝并返回第一个拷贝的位置(当n==0返回pos
list.insert(pos,beg,end)将[beg,end)之间的元素插入到pos之前(当beg==end返回pos
list.emplace(pos,args…将用参数args…初始化的元素插入到pos之前并返回该元素的位置c++11
list.emplace_back(args…)将用参数args…初始化的元素添加到list的末尾(不返回任何值)c++11
list.insert(pos,{*x1,x2,}*将列表{*x1,x2,}中所有元素的拷贝插入到*pos之前并返回第一个拷贝的位置(当为空时返回pos)c++11

特有的修改操作

操作说明
list.unique( )移除所有连续的具有相同值的重复元素
list.unique(op当元素的op操作为真时,移除所有连续的具有相同值的重复元素
list1.splice(pos,list2)list2中的所有元素移到list1的迭代器pos之前
list1.splice(pos,list2,pos2)list2迭代器Pos2所指元素移到list1迭代器pos之前
list1.splice(pos,list2,beg2,end2)list2中位与[beg2,end2)的所有元素移到list的pos之前
list.sort( )对所有元素进行排序采用符号 <
list.sort(op)对所有元素进行排序采用符号 op
list1.merge(list2,op)该操作必须保证list1与list2操作前有序,将list2中的所有元素移到list1中并保证依然有序
list1.merge(list2,op)该操作必须保证list1与list2操作前有序,将list2中的所有元素移到list1中并保证依然有序,顺序由op操作符确定
list.reverse( )将list中的所有元素逆序

代码示例:

#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;

int main( )
{
    list<int> list_temp = {1, 2, 3, 3, 4, 6, 1, 1, 5};
    list<int> list_reverse = list_temp;
    list_reverse.reverse();
    cout<<"list_reverse: ";
    copy(list_reverse.cbegin( ),list_reverse.cend( ),ostream_iterator<int>(cout," "));
    cout<<endl;

    list_temp.sort();
    cout<<"list_sort: ";
    copy(list_temp.cbegin( ),list_temp.cend( ),ostream_iterator<int>(cout," "));
    cout<<endl;

    list<int> list_merge = list_temp; 
    list_temp.unique();
    cout<<"list_unique: ";
    copy(list_temp.cbegin( ),list_temp.cend( ),ostream_iterator<int>(cout," "));
    cout<<endl;

    list_merge.merge(list_temp);
    cout<<"list_merge: ";
    copy(list_merge.cbegin( ),list_merge.cend( ),ostream_iterator<int>(cout," "));
    cout<<endl;

    return 0;
}

运行结果:
list_reverse: 5 1 1 6 4 3 3 2 1
list_sort: 1 1 1 2 3 3 4 5 6
list_unique: 1 2 3 4 5 6
list_merge: 1 1 1 1 2 2 3 3 3 4 4 5 5 6 6

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值