IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C++之链表list的方法总结 -> 正文阅读

[数据结构与算法]C++之链表list的方法总结

l.emplace_front():从头插入元素
l.push_front():从头插入元素
l.emplace_back():从尾插入元素
l.push_back():从尾插入元素
l.merge():合并两个同类型的list中的元素,被合并的list里面的元素自动清空
l.remove():从list删除元素
l.remove_if(函数名):按指定条件删除元素
注意,这个函数只擦除元素,如果元素本身是指针,则指针指向的内存不会受到任何影响。
管理指针是用户的责任.
l.reverse():把list的元素倒转
l.sort():排序,以ASCII码值排序
l.splice(合并容器的待插入位置,被合并容器,被合并容器迭代器):将待合并容器 l2 中的指定的元素(需要用迭代器)转移到合并容器 l 的指定位置中【指定元素转移到指定位置】
l.splice(合并容器的待插入位置,合并容器,待合并容器的迭代器指向first,last):将待合并容器l2 中从下标为3的位置到末尾转移到合并容器 l 的末尾位置【指定范围元素转移到指定位置】
l.splice(合并容器的待插入位置,待合并容器):将容器 l2 的所有元素转移到容器 l 的指定位置中
l.unique():删除list中重复的元素

l.pop_back():删除链表末尾元素

l.pop_front():删除链表头元素

其余方法和vector很多相似,详见请看:C++之动态数组(Vector)中运用各类迭代器_承诺$枷锁的博客-CSDN博客

#include <iostream>
#include <cstring>
#include <list>
using namespace std;
bool func(const string& value){
    if(value == "last")
        return true;
    return false;
}
int main()
{
    list<string> l;
    list<string> l2;
    list<int>  l_int;
    list<string>::iterator it;
    list<int>::iterator it_int;
    //从头插入元素
    l.emplace_front("first");
    l2.push_front("111");
    //从尾插入元素
    l.emplace_back("last");
    l2.push_back("222");
    //指定位置插入元素
    l_int.insert(l_int.begin(),1);
    l_int.push_back(2);
    l_int.push_back(3);
    for(it=l.begin();it!=l.end();++it){
        cout<<*it<<" ";     //结果:first last 
    }
    cout<<endl;
    for(it_int=l_int.begin();it_int!=l_int.end();++it_int){
        cout<<*it_int<<" ";     //结果:1 2 3 
    }
    cout<<endl;
    //合并两个同类型的list中的元素,被合并的list里面的元素自动清空
    l.merge(l2);
    for(it=l.begin();it!=l.end();++it){
        cout<<*it<<" ";        //结果: 容器l:111 222 first last 
    }
    cout<<endl;
    for(it=l2.begin();it!=l2.end();++it){
        cout<<*it<<" ";        //结果: 容器l2: NULL
    }
    cout<<endl;
    //从list删除元素
    l.remove("222");
    for(it=l.begin();it!=l.end();++it){
        cout<<*it<<" ";         //结果: 容器l:111 first last 
    }
    cout<<endl;
    //标准库算法对迭代器而不是容器进行操作。因此,算法不能(直接)添加或删除元素
    //按指定条件删除元素
    //注意,这个函数只擦除元素,如果元素本身是指针,则指针指向的内存不会受到任何影响。
    //管理指针是用户的责任。
    l.remove_if(func);  //func是函数名,容器元素依次传进去,删除返回true的元素
    for(it=l.begin();it!=l.end();++it){
        cout<<*it<<" ";     //结果: 容器l:111 first 
    }
    cout<<endl;
    //把list的元素倒转
    l.reverse();
    for(it=l.begin();it!=l.end();++it){
        cout<<*it<<" ";     //结果: 容器l:first 111 
    }
    cout<<endl;
    //排序,以ASCII码值排序
    l.sort();
    for(it=l.begin();it!=l.end();++it){
        cout<<*it<<" ";     //结果: 容器l:111 first 
    }
    cout<<endl;
    l2.push_back("000");
    l2.push_back("333");
    l2.push_back("333");
    l2.push_back("444");
    l2.push_back("555");
    l2.push_back("666");
    for(it=l2.begin();it!=l2.end();++it){
        cout<<*it<<" ";     //结果: 容器l2:000 333 333 444 555 666 
    }
    cout<<endl;
    //将容器 l2 中的指定的元素(需要用迭代器)转移到容器 l 的指定位置中
    //参数1:合并容器 l 的元素插入位置,参数2:被合并容器 l2
    //参数3:被合并容器 l2 的迭代器的指向
    it=l2.begin();
    l.splice(l.begin(),l2,it);
    cout<<"容器 l:"<<endl;
    //遍历容器(不改变值),枚举
    for(auto i:l){
        cout<<i<<" ";     //结果: 容器l:000 111 first
    }
    cout<<endl;
    it=l2.begin();
    //将迭代器向后移动两位
    advance(it,2);
    //将容器 l2 中从下标为3的位置到末尾转移到容器 l 的末尾位置
    //参数1:合并容器的元素插入位置,参数2:合并容器
    //参数3:被合并容器的迭代器的指向,即first,参数4:last
    l.splice(l.end(),l,it,l2.end());
    cout<<"容器 l:"<<endl;
    for(auto i:l){
        cout<<i<<" "; //结果: 容器l:000 111 first 444 555 666
    }
    cout<<endl;
    cout<<"容器 l2:"<<endl;
    for(it=l2.begin();it!=l2.end();++it){
        cout<<*it<<" ";     //结果: 容器l2:333 333
    }
    cout<<endl;
    it=l.begin();
    advance(it,2);
    //将容器 l2 的所有元素转移到容器 l 的指定位置中
    // l.splice(l.begin(),l2);
    //将容器 l2 的所有元素转移到容器 l 的指定位置(下标为2)中
    l.splice(it,l2);
    cout<<"容器 l23:"<<endl;
    for(auto i:l){
        cout<<i<<" ";   //结果: 容器l:000 111 333 333 first 444 555 666
    }
    cout<<endl;
    cout<<"容器 l2:"<<endl;
    for(auto i:l2){
        cout<<i<<" ";   //结果: 容器l2: NULL
    }
    cout<<endl;
    //删除list中重复的元素
    l.unique();
    cout<<"容器 l:"<<endl;
    for(auto i:l){
        cout<<i<<" ";   //结果: 容器l:000 111 333 first 444 555 666
    }
    cout<<endl;
    cout<<"容器 l2:"<<endl;
    for(it=l2.begin();it!=l2.end();++it){
        cout<<*it<<" "; //结果: 容器l2: NULL
    }
    cout<<endl;
    cout<<"=================="<<endl;
    // string *ptr;
    // // string ptr[7];
    // //返回一个读/写迭代器,指向对象的第一个元素
    // //allocate():内存分配
    // ptr=l.get_allocator().allocate(7);
    // for(int i=0;i<l.size();++i){
    //     ptr[i] = "1";
    // }
    // // for(auto i:l){
    // //     cout<<i<<" ";
    // // }
    // // cout<<endl;
    // for(int i=0;i<l.size();++i){
    //     cout<<ptr[i]<<" ";   
    // }
    // cout<<endl;
    l.pop_back();
    l.pop_front();
    for(auto i:l){
        cout<<i<<" ";   //结果: 容器l:111 333 first 444 555
    }
    cout<<endl;
    return 0;
}

?

first last 
1 2 3 
111 222 first last 

111 first last 
111 first 
first 111 
111 first 
000 333 333 444 555 666 
容器 l:
000 111 first 
容器 l:
000 111 first 444 555 666 
容器 l2:
333 333 
容器 l23:
000 111 333 333 first 444 555 666 
容器 l2:

容器 l:
000 111 333 first 444 555 666 
容器 l2:

==================
111 333 first 444 555 
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:14:52  更:2022-09-15 02:15:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:39:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码