c_cpp CPP - 教程017 - 序列容器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp CPP - 教程017 - 序列容器相关的知识,希望对你有一定的参考价值。

#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
#include <numeric>
#include <cmath>
#include <sstream>
#include <thread>
#include <ctime>

#include <deque>
#include <list>
#include<forward_list>

bool isEven(const int& val){
    return (val % 2) == 0;
}

int main()
{
    // ---------- SEQUENCE CONTAINERS ----------
    // Contains data stored in order
    
    // ---------- DEQUES ----------
    
    // A deque (Deck) is a dynamic array like vectors
    // except it also allows for insertion or deletion
    // from the front
    std::deque<int> deq1; 
    
    // Add to the end and front
    deq1.push_back(5);
    deq1.push_front(1);
    
    // Add values with assign
    deq1.assign({11,12});
    
    // Get the size
    std::cout << "Size : " << deq1.size()
            << "\n";
    
    // Access by index
    std::cout << deq1[0] << "\n";
    std::cout << deq1.at(1) << "\n";
    
    // Add at an index using an iterator
    std::deque<int>::iterator it = deq1.begin() + 1;
    deq1.insert(it, 3);
    
    // Add multiple values
    int tempArr[5] = {6,7,8,9,10};
    deq1.insert(deq1.end(), tempArr, tempArr+5);
    
    // Erase at an index 
    deq1.erase(deq1.end());
    
    // Erase 1st 2 elements
    deq1.erase(deq1.begin(), deq1.begin()+2);
    
    // Pop first value
    deq1.pop_front();
    
    // Pop last
    deq1.pop_back();
    
    // Create a deque with 2 50s
    std::deque<int> deq2(2,50);
    
    // Swap values in deques
    deq1.swap(deq2);
    
    // Delete all values
    deq1.clear();
    
    // Cycle through the deque
    for(int i : deq1)
        std::cout << i << "\n";
    
    // ---------- END DEQUES ----------
    
    // ---------- LIST ----------
    // Lists are the most efficient at inserting,
    // moving and extracting elements, but lack
    // direct access to elements
    
    // Add values
    int arr[5] = {1,2,3,4,5};
    std::list<int> list1;
    list1.insert(list1.begin(), arr, arr+5);
    
    // Adding values with assign
    list1.assign({10,20,30});
    
    // Add to end and front
    list1.push_back(5);
    list1.push_front(1);
    
    // Get the size
    std::cout << "Size : " << list1.size()
            << "\n";
    
    // Can't access index
    // std::cout << list1[0] << "\n";
    
    // You can access the index with an iterator
    std::list<int>::iterator it2 = list1.begin();
    std::advance(it2, 1);
    std::cout << "2nd Index : " << 
            *it2 << "\n";
    
    // Insert at an index
    it2 = list1.begin();
    list1.insert(it2, 8);
    
    // Erase at an index
    list1.erase(list1.begin());
    
    // Erase 1st 2 elements
    it2 = list1.begin();
    std::list<int>::iterator it3 = list1.begin();
    std::advance(it3, 2);
    list1.erase(it2, it3);
    
    // Pop first value
    list1.pop_front();
    
    // Pop last
    list1.pop_back();
    
    // Create another list
    int arr2[6] = {10,9,8,7,6,6};
    std::list<int> list2;
    list2.insert(list2.begin(), arr2, arr2+5);
    
    // Sort the list
    list2.sort();
    
    // Reverse the list
    list2.reverse();
    
    // Remove duplicates
    list2.unique();
    
    // Remove a value
    list2.remove(6);
    
    // Remove if a condition is true
    list2.remove_if (isEven);
 
    // Merge lists
    list1.merge(list2);
    
    for(int i : list2)
        std::cout << i << "\n";
    
    std::cout << "\n";
    
    // Cycle through the list
    for(int i : list1)
        std::cout << i << "\n";
    
    std::cout << "\n";
    
    // ---------- END LIST ----------
    
    // ---------- FORWARD_LIST ----------
    // A forward list is like a list, but each list
    // item only has a link to the next item in the 
    // list and not to the item that proceeds it.
    
    // This make them the quickest of the sequence 
    // containers
    
    std::forward_list<int> fl1;
    
    // Assign values
    fl1.assign({1,2,3,4});
    
    // Push and pop front
    fl1.push_front(0);
    fl1.pop_front();
    
    // Get 1st
    std::cout << "Front : " << fl1.front();
    
    // Get iterator for 1st element
    std::forward_list<int>::iterator it4 = fl1.begin();
    
    // Insert after 1st element
    it4 = fl1.insert_after(it4, 5);
    
    // Delete just entered 5
    it4 = fl1.erase_after(fl1.begin());
    
    // Place in 1st position
    fl1.emplace_front(6);
    
    // Remove a value
    fl1.remove(6);
    
    // Remove if a condition is true
    fl1.remove_if (isEven);
    
    std::forward_list<int> fl2;
    fl2.assign({9,8,7,6,6});
    
    // Remove duplicates
    fl2.unique();
    
    // Sort
    fl2.sort();
    
    // Reverse
    fl2.reverse();
    
    // Merge lists
    fl1.merge(fl2);
    
    // Clear
    fl1.clear();
    
    for(int i : fl1)
        std::cout << i << "\n";
    
    std::cout << "\n";
    
    for(int i : fl2)
        std::cout << i << "\n";
    
    // ---------- END FORWARD_LIST ----------
    
    return 0;
}

以上是关于c_cpp CPP - 教程017 - 序列容器的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 序列化和反序列化对象

c_cpp 序列化反序列化二叉树

c_cpp 最长的共同子序列

c_cpp 最长的子序列

c_cpp 最长的子序列

c_cpp 最长的字符串子序列