STL标准库-容器-forward_list

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性。

forward_list即单向list,功能少额外开销就小.而且只能在前段插入元素

结构如下


 

一 定义

#include <forward_list>

int main(int argc, const char * argv[]) {

    //a.定义 list<typeName> name;
    forward_list<int> l;
    
    //b.拷贝构造
    forward_list<int> l1(l);
    
    //c.拷贝赋值
    l1 = l;
    
    //d.按指定元素个数定义 含五个默认值是0的元素的链表
    forward_list<int> l2(5);
    
    //e.指定元素个数及类型 含有5个值为2的链表
    forward_list<int> l3(5,2);
    
    //f.指定赋值区域
    forward_list<int> l4(l1.begin(),l1.end());
    
    for(auto i : l)
    {
        cout<< i << endl;
    }

    return 0;
}

 


二 与迭代器的使用

由于forward_list的迭代器内指向内存不连续 顾不能做迭代器 "+", "-" 操作

int main()
{
    forward_list<int> l = {1,2,3,4,5,6,7,8,9,10};
    
    //返回迭代器开始之前的位置
    l.before_begin();
    
    //返回第一个元素地址
    l.begin();
    
    //返回最后一个元素的下一个位置
    l.end();
    
    //返回迭代器开始之前的位置
    l.cbefore_begin();
    
    //返回第一个元素地址
    l.cbegin();
    
    //返回最后一个元素的下一个位置
    l.cend();
    return 0;
}

 


 

三 容量

int main()
{
    forward_list<int> l = {1,2,3,4,5,6,7,8,9,10};
    
    //返回forward_list是否为空
    cout << l.empty() << endl;
    
    //forward_list的最大容量
    cout << l.max_size() << endl;
    
    return 0;
}

 


 

四 元素访问

int main()
{
    forward_list<int> l = {1,2,3,4,5,6,7,8,9,10};
    
    //返回第一个元素
    cout<< l.front() <<endl;
    
    return 0;
}

 


 

五 操作

int main()
{
    forward_list<int> l = {1,2,3,4,5,6,7,8,9,10};
    iterator<forward_list<int>, int> i;
    for(auto i : l)
    {
        
        cout << i << " ";
    }
    cout<<"初始化"<<endl;
    
    //给l赋值成10个1
    l.assign(10, 1);
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"assign()"<<endl;
    
    //前段插入0
    l.push_front(0);
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"push_front()"<<endl;
    
    //在头部插入一组 参数为emplace_front(initializer_list<>) 初始化1
    l.emplace_front(1);
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"emplace_front()"<<endl;
    
    //弹出第一个元素
    l.pop_front();
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"pop_front()"<<endl;
    
    //在指定位置后面插入一组数据
    l.emplace_after(l.begin(), 0);
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"emplace_after()"<<endl;

    //在指定位置后面插入一组数据
    l.insert_after(l.begin(), 0);
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"insert_after()"<<endl;
    
    //在指定位置之后插入元素
    l.insert_after(l.begin(), 11);
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"insert_after()"<<endl;
    
    //删除指定位置
    l.erase_after(l.begin(),l.end());
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"erase_after()"<<endl;

    //交换并释l2
    forward_list<int> l2 = {10,10,10,10};
    l.swap(l2);
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"swap()"<<endl;

    //重新设定内存,不足补齐, 超过弹出尾部
    l.resize(5,20);
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"resize()"<<endl;

    //清空
    l.clear();
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"clear()"<<endl;

    return 0;
}

 

六 修改操作

int main()
{
    //指定位置拼接链表
    forward_list<int> l = {1,2,3,4,5,6,7,8,9,10};
    forward_list<int> l1 = {0,1,2,3,4,5,6,7,8,9,10};
    
    l.splice_after(l.before_begin(), l1);
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"splice_after()"<<endl;
    
    //删除指定元素
    l.remove(10);
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"remove()"<<endl;
    
    //按指定条件删除
    l.remove_if([](int x){return x<8;});
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"remove_if()"<<endl;
    
    //排序 <
    l.sort();
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"sort(<)"<<endl;
    
    l.sort([](int first, int second){return first > second;});
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"sort(>)"<<endl;
    
    //删除重复元素
    l.unique();
    for(auto i : l)
    {
        cout << i << " ";
    }
    cout<<"unique()"<<endl;
    
    forward_list<int> l2 = {1,2,3,4,4,5,5,6,6,7,8,9,10};
    
    //按指定要求删除元素(排序后)
    l2.unique([](int x, int y) { return (x == y) && (x < 6);});
    for(auto i : l2)
    {
        cout << i << " ";
    }
    cout<<"unique([])"<<endl;

    forward_list<int> l3 = {1,3,5,7};
    forward_list<int> l4 = {2,4,6,8};
    //合并两个有序forward_list 合并后仍然有序
    l3.merge(l4);
    for(auto i : l3)
    {
        cout << i << " ";
    }
    cout<<"merge()"<<endl;
    
    //翻转
    l3.reverse();
    for(auto i : l3)
    {
        cout << i << " ";
    }
    cout<<"reverse()"<<endl;
    
    //交换 多退少补 并释放l
    l3.swap(l);
    for(auto i : l3)
    {
        cout << i << " ";
    }
    cout<<"reverse()"<<endl;
    
    return 0;
}

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值