250x250
Notice
Recent Posts
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
관리 메뉴

일상 코딩

[C++/CPP] 16.01. Standard Template Libraries, containers 본문

C++/따배C++ 16강 STL

[C++/CPP] 16.01. Standard Template Libraries, containers

polarcompass 2022. 1. 2. 20:11
728x90
#include<iostream>
#include<vector>
#include<string>
#include<deque>
#include<set>
#include<map>
#include<stack>
#include<queue>

using namespace std;

void sequence_containers()
{
    // vector
    {
        vector<int> vec;
        for (int i=0; i < 10; ++i)
            // 뒤로만 추가
            vec.push_back(i);

        for(auto & e : vec)
            cout << e << " ";
        cout << endl;
    }

    // deque
    {
        // 앞, 뒤로 추가 가능
        deque<int> deq;
        for (int i = 0; i < 10; ++i)
        {
            // 뒤로 추가
            deq.push_back(i);
            // 앞으로 추가
            deq.push_front(i);      
        }

        for(auto & e : deq)
            cout << e << " ";
        cout << endl;
        cout << endl;
    }
}

void associative_containers()
{
    cout << "< set >" << endl;
    // set
    // 중복 안됨.
    {
        set<string> str_set;

        str_set.insert("Hello");
        str_set.insert("World");
        str_set.insert("Hello");

        cout << str_set.size() << endl;

        for (auto & e: str_set)
            cout << e << " ";
        cout << endl;
        cout << endl;
    }

    cout << "< multiset >" << endl;
    // multiset : duplication is allowed
    // 중복 허용
    {
        std::multiset<string> multi_set;
        multi_set.insert("Hello");
        multi_set.insert("World");
        multi_set.insert("Hello");

        cout << multi_set.size() << endl;

        for (auto & e : multi_set )
            cout << e << " ";
        cout << endl;
        cout << endl;
    }

    cout << "< map : key / value >" << endl;
    // map : key / value
    {
        std::map<char, int> dict;
        dict['a'] = 10;
        dict['b'] = 20;
        dict['c'] = 50;

        cout << dict['a'] << endl;

        dict['a'] = 100;

        cout << dict['a'] << endl;

        for ( auto & e : dict)
            // e.first -> key 값
            // e.second -> value 값
            cout << e.first << ":" << e.second << " ";
        cout << endl;
        cout << endl;
    }

    cout << "< multimap >" << endl;
    // multimap : duplicted keys
    {
        std::multimap<char, int> map;

        // Before c++ 14, pair<char, int>('a',10)
        map.insert(std::pair('a', 10));
        map.insert(std::pair('b', 10));
        map.insert(std::pair('c', 10));
        map.insert(std::pair('a', 100));

        cout << map.count('a') << endl;

        for( auto & e : map)
        {  
            cout << e.first; // key
            cout << ":";
            cout << e.second; // value
            cout << " ";
        }
        cout << endl;
        cout << endl;
    }
}

void container_adapters()
{
    // stack
    {
        cout << " Stack " << endl;

        std::stack<int> stack;
        stack.push(1); // push adds a copy
        stack.emplace(2); // emplace constructs a new object
        stack.emplace(3);

        cout << stack.top() << endl;

        stack.pop(); // top 제거

        cout << stack.top() << endl;

        cout << endl;
    }

    // queue
    {
        cout << "Queue" << endl;

        std::queue<int> queue;

        queue.push(1);
        queue.push(2);
        queue.push(3);
        cout << queue.front() << " " << queue.back() << endl;

        queue.pop();
        cout << queue.front() << " " << queue.back() << endl;

        cout << endl;
    }

    // Priority queue
    {
        cout << "Priority queue" << endl;
        std::priority_queue<int> queue;

        for(const int n : {1, 8, 5, 6, 3, 4, 0, 9, 7, 2})
            queue.push(n);
        
        for (int i = 0; i < 10; ++i)
        {
            cout << queue.top() << endl;
            queue.pop();
        }
        cout << endl;
    }
}

int main()
{
    sequence_containers();
    cout << endl;

    associative_containers();
    cout << endl;

    container_adapters();

    return 0;
}
728x90

'C++ > 따배C++ 16강 STL' 카테고리의 다른 글

[C++/CPP] 16.03. STL algorithm  (0) 2022.01.05
[C++/CPP] 16.02. STL iterator, 반복자  (0) 2022.01.04