zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    CentOS6.4 64位系统安装jdk
    oracle安装界面中文乱码解决
    亦步亦趋在CentOS 6.4下安装Oracle 11gR2(x64)
    CentOS 6.3(x86_64)下安装Oracle 10g R2
    Spring中映射Mongodb中注解的解释
    MongoDB 创建基础索引、组合索引、唯一索引以及优化
    MongoDB 用MongoTemplate查询指定时间范围的数据
    Java获取泛化类型
    SpringBoot标准Properties
    java如何获取一个对象的大小【转】
  • 原文地址:https://www.cnblogs.com/LearningTheLoad/p/7446482.html
Copyright © 2011-2022 走看看