zoukankan      html  css  js  c++  java
  • STL

    forward list是一个行为受限的list, 不能走回头路。

    它只提供前向迭代器, 而不提供双向迭代器。

    eg:

    rbegin(), rend(), crbegin(), crend()这些都不提供。

    它不提供size()成员函数。

    没有指向最末元素的anchor, 因此不提供back(), push_back(), pop_back()。

    ForwardListTest.cpp:

    #include <forward_list>
    #include "../../Core/print.hpp"
    #include "ForwardListTest.h"
    
    using namespace std;
    
    void ForwardListTest::findDemo()
    {
        forward_list<int> list = { 1, 2, 3, 4, 5, 97, 98, 99 };
    
        // find the position before the first even element
        auto posBefore = list.before_begin();
        for (auto pos = list.begin(); pos != list.end(); ++pos, ++posBefore) 
        {
            if (*pos % 2 == 0) 
            {
                break;  // element found
            }
        }
    
        // and insert a new element in front of the first even element
        list.insert_after(posBefore, 42);
        PRINT_ELEMENTS(list);
    }
    
    void ForwardListTest::run()
    {
        printStart("findDemo()");
        findDemo();
        printEnd("findDemo()");
    }

    运行结果:

    ---------------- findDemo(): Run Start ----------------
    1 42 2 3 4 5 97 98 99
    ---------------- findDemo(): Run End ----------------

    自定义find_before_if操作:

    #include "../../Core/findbefore.hpp"
    
    void ForwardListTest::findBeforeDemo()
    {
        forward_list<int> list = { 1, 2, 3, 4, 5, 97, 98, 99 };
    
        // find the position before the first even element
        auto posBefore = find_before_if(list.before_begin(), list.end(), 
            [](int i) {
                return i % 2 == 0;
            });
    
        // and insert a new element in front of the first even element
        list.insert_after(posBefore, 42);
        PRINT_ELEMENTS(list);
    }
    
    void ForwardListTest::run()
    {
        printStart("findBeforeDemo()");
        findBeforeDemo();
        printEnd("findBeforeDemo()");
    }

    运行结果:

    ---------------- findBeforeDemo(): Run Start ----------------
    1 42 2 3 4 5 97 98 99
    ---------------- findBeforeDemo(): Run End ----------------

    完整Demo

    void ForwardListTest::fullDemo()
    {
        // create two forward lists
        forward_list<int> list1 = { 1, 2, 3, 4 };
        forward_list<int> list2 = { 77, 88, 99 };
        printLists("initial:", list1, list2);
    
        // insert six new element at the beginning of list2
        list2.insert_after(list2.before_begin(), 99);
        list2.push_front(10);
        list2.insert_after(list2.before_begin(), { 10, 11, 12, 13 });
        printLists("6 new elems:", list1, list2);
    
        // insert all elements of list2 at the beginning of list1
        list1.insert_after(list1.before_begin(),
            list2.begin(), list2.end());
        printLists("list2 into list1:", list1, list2);
    
        // delete second element and elements after element with value 99
        list2.erase_after(list2.begin());
        list2.erase_after(find(list2.begin(), list2.end(),
            99),
            list2.end());
        printLists("delete 2nd and after 99:", list1, list2);
    
        // sort list1, assign it to list2, and remove duplicates
        list1.sort();
        list2 = list1;
        list2.unique();
        printLists("sorted and unique:", list1, list2);
    
        // merge both sorted lists into list1
        list1.merge(list2);
        printLists("merged:", list1, list2);
    }

    运行结果:

    ---------------- fullDemo(): Run Start ----------------
    initial:
    list1: 1 2 3 4
    list2: 77 88 99
    6 new elems:
    list1: 1 2 3 4
    list2: 10 11 12 13 10 99 77 88 99
    list2 into list1:
    list1: 10 11 12 13 10 99 77 88 99 1 2 3 4
    list2: 10 11 12 13 10 99 77 88 99
    delete 2nd and after 99:
    list1: 10 11 12 13 10 99 77 88 99 1 2 3 4
    list2: 10 12 13 10 99
    sorted and unique:
    list1: 1 2 3 4 10 10 11 12 13 77 88 99 99
    list2: 1 2 3 4 10 11 12 13 77 88 99
    merged:
    list1: 1 1 2 2 3 3 4 4 10 10 10 11 11 12 12 13 13 77 77 88 88 99 99 99
    list2:
    ---------------- fullDemo(): Run End ----------------

  • 相关阅读:
    MySQL基础(一):检索数据
    Go基础(九):并发
    Go基础(八):反射
    Go基础(七):接口
    Go基础(六):方法
    Go基础(五):结构体
    Go基础(四):流程控制和函数
    Go基础(三):内置基础类型和一些技巧
    Go基础(二):变量和常量
    Go基础(一):命令行操作
  • 原文地址:https://www.cnblogs.com/davidgu/p/4891990.html
Copyright © 2011-2022 走看看