C++ - deque

2022. 8. 7. 01:31STUDY/C++

반응형

Deque는 vector 의 단점을 보완하기 위해 만들어진 컨테이너라고 한다. 

동일하게 배열 기반의 구조이고, 벡터의 단점인 동적 할당 과정을 보완했는데,

벡터처럼 새로 재할당 후 원소를 복사하는것이 아니고, 

* 새로 일정한 크기의 메모리 블록을 할당 함으로써 이전 원소를 복사하지 않는다. 

* 데이터의 삽입 삭제를 front, back에서 할 수 있다.

* deque 중간에 원소를 삽입하거나 삭제 가능하다. (push_back, push_front, pop_back, pop_front.... 엥 다 할수 있잖아..?)

연습용으로 아래 포스팅의 다양한 예제들 한번씩 입력해보자... !

# 앞뒤 값 삽입 그리고 역순 출력 #

#include <iostream>
#include <deque>

using namespace std;

int main() {
    deque<int> dq;

    for(int i =0; i < 5; i++) {
        dq.push_back((i+1)*10);
    }
    deque<int>::iterator iter;

    cout << "[Default] : ";
    for(iter = dq.begin(); iter != dq.end(); iter++) {
        cout << *iter << " ";
    }
    cout << '\n';
#if 1
    cout << "[TEST1] push_front : ";
    dq.push_front(1);
    dq.push_front(2);
#endif
    for(iter = dq.begin(); iter != dq.end(); iter++) {
        cout << *iter << " ";
    }
    cout << '\n';
    cout << "[TEST2] push_back : ";
    dq.push_back(100);
    dq.push_back(200);
    for(iter = dq.begin(); iter != dq.end(); iter++)
        cout << *iter << " ";
    cout << '\n';

    // print reverse ! 
    cout << "[TEST3] Reverse iterator: ";
    deque<int>::reverse_iterator riter;

    for(riter = dq.rbegin(); riter != dq.rend(); riter++) {
        cout << *riter << " ";
    }
    cout << '\n';


    return 0;
}
결과 값 
[Default] : 10 20 30 40 50
[TEST1] push_front : 2 1 10 20 30 40 50
[TEST2] push_back : 2 1 10 20 30 40 50 100 200 
[TEST3] Reverse iterator: 200 100 50 40 30 20 10 1 2

 

# 중간에 값 삽입, 삭제, 출력 #

#include <iostream>
#include <deque>
#include <string>
using namespace std;


int main() {
    deque<string> dq;

    dq.push_front("love");
    dq.push_back("and");
    dq.push_front("Thunder");

    cout << "[DEFAULT]" << '\n';
    deque<string>::iterator iter;
    for(iter = dq.begin(); iter != dq.end(); iter++) {
        cout << *iter << " ";
    }
    cout << '\n';

    cout << "[TEST1] Insert(const iter+2,  2, INSERT)" << '\n';
    deque<string>::const_iterator coniter = dq.begin();
    coniter += 2; // 2번째 뒤에.. ! 1, 2, [여기], 3, ...
    dq.insert(coniter, 2, "INSERT");
    for(coniter = dq.begin(); coniter!=dq.end(); coniter++)
        cout << *coniter << " ";
    cout << '\n';

    cout << "[TEST2] dq.end()의 전전값 erase : " << '\n';
    coniter = dq.end();
    coniter--; coniter--;
    dq.erase(coniter);
    for(coniter = dq.begin(); coniter != dq.end(); coniter++)
        cout << *coniter << " ";
    cout << '\n';

    coniter = dq.end(); // 다시 정의해줘야함. 
    coniter -= 2; // 뒤에서 2번째. 
    dq.erase(coniter);
    for(coniter = dq.begin(); coniter != dq.end(); coniter++)
        cout << *coniter << " ";
    cout << '\n';
    
         cout << "[TEST3] dq.at(i) : " << '\n';
     deque<string>::size_type i;
     for(i = 0; i < dq.size(); i++)
         cout <<  i << ": " << dq.at(i) << '\n';
 
     cout << "[TEST4] dq[i] : " << '\n';
     for(i = 0; i < dq.size(); i++)
         cout <<  i << ": " << dq[i] << '\n';
 
 
     return 0;
 }
# 결과값 #

[DEFAULT]
Thunder love and 
[TEST1] Insert(const iter+2,  2, INSERT)
Thunder love INSERT INSERT and 
[TEST2] dq.end()의 전전값 erase : 
Thunder love INSERT and 
Thunder love and 
[TEST3] dq.at(i) : 
0: Thunder
1: love
2: and
[TEST4] dq[i] : 
0: Thunder
1: love
2: and

 

 

https://blockdmask.tistory.com/73

 

[C++] deque container 정리 및 사용법

<목차> 1) deque container 2) deque의 사용 3) deque의 생성자와 연산자 4) deque의 멤버 함수 5) 다양한 예제 1) deque container deque는 vector의 단점을 보완하기 위해서 만들어진 container 입니다. deq..

blockdmask.tistory.com

 

728x90
반응형

'STUDY > C++' 카테고리의 다른 글

C++ - pair ( aka. vector / typedef / sort )  (1) 2022.08.08
C++ - 수식 함수들  (0) 2022.08.07
c++ - stack/queue  (0) 2022.08.07
C++ - list  (0) 2022.08.06
C++ - vector  (0) 2022.08.06