STL-list容器使用

  • list结点的定义
template <class T>
struct __list_node {
    typedef void* void_pointer;
    void_pointer prev; // 型別為 void*。其實可設為 __list_node<T>*
    void_pointer next;
    T data;
};
  • list对象的构建
list<int> l;//创建一个空的list对象
list<int> l1(5);//创建具有5个元素的对象,值默认初始化为0
list<int> l2(3, 7);//创建具有3个元素的对象,值初始化为7
list<int> l3(l2.begin(), l2.end());//采用一个区间初始化
list<int> l4(l1);//采用对象拷贝构造
  • list的元素更新操作
list<int>::iterator iter = l2.begin();
    ++iter; //迭代器现在指向第二个7的位置
    iter = l2.insert(iter, 10);//向迭代器所指位置之前插入元素10,并返回插入位置的迭代器器
    l2.insert(iter, 3, 8);//向10之前插入3个8//让返回插入位置的指针
    vector<int> v(2, 18);
    l2.insert(iter,v.begin(), v.end());//向迭代器所指位置插入后序区间所指的内容
    l1.push_front(88);//向链表开头插入88
    l1.push_back(66);//向链表末尾插入66
    l2.pop_back();//删除链表头部元素
    l2.pop_front();//删除链表末尾的元素
    l1.assign(5, 8);//删除l1之前的所有元素,开辟5个空间值初始化为8
    l1.assign(l2.begin(), l2.end());//删除l1之前的所有元素,采用迭代器所指区间的元素初始化//左闭右开
    int arr[] = { 1, 2, 3, 5, 6, 8, 9 };
    l1.assign(arr+1,arr+5);//删除l1之前的所有元素,采用指针所指的范围初始化//左闭右开
    list<int>::iterator iter1 = l2.begin();
    ++iter1;
    iter1 = l2.erase(iter1);//删除迭代器所指向的元素//迭代器失效,但会返回删除位置之后元素的位置可以接收
    list<int>::iterator iter2 = l2.begin();
    advance(iter2, 4);
    iter2 = l2.erase(iter2);
    l2.erase(iter1, iter2);//可以删除采用迭代器表示区间的元素//
    l2.swap(l1);//交换两个对象的元素,个数可以不同
    l1.clear();//删除所有的元素,调用析构函数释放空间和清理
    l2.resize(3);//更改对象的有效元素个数,如果传入的sz比有效元素的个数少,则删除多余的元素
    l2.resize(5, 9); //
  • list操作函数
l2.reverse();//链表逆置函数
    iter1 = l2.begin();
    //l2.splice(iter1, l4);//将l4的元素快速的插入到l2中迭代器所指的位置,并将元素从l4中删除
    list<int>::iterator iter3 = l4.begin();
    ++iter3;
    //l2.splice(iter1, l4, iter3);//将迭代器iter3所指的元素快速插入到l2中iter1所指的位置上
    ++iter3;
    //l2.splice(iter1, l4, l4.begin(), iter3);//将迭代器所表示区间中的元素快速插入到l2中iter1所指的位置上
    //////////////////////////////////////////并将元素从l4中删除。
    l2.push_back(9);
    l2.push_back(0);
    l2.unique();//删除链表中连续且重复除第一个之外的所有元素
    l2.sort();
    l2.merge(l4);//有序链表的合并,将l4置为空的
    l2.remove(9);//删除具有特定值的元素,并将调用析构函数,减少有效元素的个数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值