도순씨의 코딩일지

C++ :: STL duque 컨테이너 본문

𝐏𝐑𝐎𝐆𝐑𝐀𝐌𝐌𝐈𝐍𝐆/𝐂++

C++ :: STL duque 컨테이너

도순씨 2020. 9. 14. 00:00

deque 컨테이너는 vector 컨테이너로 vector의 단점을 보완합니다. deque 컨테이너 또한 배열 기반 컨테이너입니다.

 

deque는 여러 개의 메모리 블록을 할당하고 사용자에게는 하나의 블록처럼 보이게 합니다. 

 

다음 예제는 push_back() 멤버 함수를 사용하여 deque에 원소를 추가하는 예제입니다.

 

⭐️ push_back 멤버함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <deque>
using namespace std;
 
int main(void){
    deque<int> dq;
 
    for(deque<int> :: size_type i = 0 ; i < 10++i)
        dq.push_back((i+1* 10);
 
    for(deque<int> :: size_type i = 0 ; i < dq.size() ; ++i)
        cout << dq[i] << ' ';
    cout << endl;
 
    return 0;
}
cs

 

⭐️ push_back 멤버함수 실행결과

1
10 20 30 40 50 60 70 80 90 100 
cs

 

다음 예제는 push_front()를 사용해보겠습니다.

 

⭐️ deque의 push_front()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <deque>
using namespace std;
 
int main(){
    deque<int> dq;
 
    dq.push_back(10);
    dq.push_back(20);
    dq.push_back(30);
    dq.push_back(40);
    dq.push_back(50);
 
    for(deque<int> :: size_type i = 0 ; i < dq.size() ; ++i)
        cout << dq[i] << " ";
    cout << endl;
 
    dq.push_front(100);
    dq.push_front(200);
    for(deque<int> :: size_type i = 0 ; i < dq.size() ; ++i)
        cout << dq[i] << " ";
    cout << endl;
    return 0;
}
cs

 

⭐️ deque의 push_front() 실행결과

1
2
10 20 30 40 50 
200 100 10 20 30 40 50 
cs

 

다음은 임의 접근 반복자가 지원하는 연산을 수행한 예제입니다.

 

⭐️ deque의 반복자

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
#include <iostream>
#include <deque>
using namespace std;
 
int main(void){
    deque<int> dq;
 
    dq.push_back(10);
    dq.push_back(20);
    dq.push_back(30);
    dq.push_back(40);
    dq.push_back(50);
 
    deque<int> :: iterator iter;
    for(iter = dq.begin() ; iter != dq.end() ; ++ iter)
        cout << *iter << " ";
    cout << endl;
 
    iter = dq.begin() + 2;
    cout << *iter << endl;
 
    iter += 2;
    cout << *iter << endl;
 
    iter -= 3;
    cout << *iter << endl;
 
    return 0;
}
cs

 

⭐️ deque의 반복자 실행결과

1
2
3
4
10 20 30 40 50 
30
50
20
cs

 

deque의 insert() 예제는 반복자가 가리키는 임의의 위치에 원소를 삽입할 수 있습니다. 다음은 deque의 insert() 멤버 함수를 사용한 예제입니다

 

⭐️ deque의 insert() 

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
#include <iostream>
#include <deque>
using namespace std;
 
int main(void){
    deque<int> dq;
 
    for(int i = 0 ; i < 10 ; i ++)
        dq.push_back((i+1* 10 );
 
    deque<int> :: iterator iter;
    deque<int> :: iterator iter2;
    for(iter = dq.begin() ; iter != dq.end() ; ++iter)
        cout << *iter << ' ';
    cout << endl;
 
    iter = dq.begin() + 2;      // 인덱스는 배열과 비슷
    iter2 = dq.insert(iter, 500);
    cout << *iter2 << endl;
 
    for(iter = dq.begin() ; iter != dq.end() ; ++iter)
        cout << *iter << ' ';
    cout << endl;
 
    return 0;
}
cs

 

⭐️ deque의 insert() 실행결과

1
2
3
10 20 30 40 50 60 70 80 90 100 
500
10 20 500 30 40 50 60 70 80 90 100 
cs

 

deque 또한 vector처럼 연속한 원소를 빠르게 접근할 수 있도록 at()과 [] 연산자를 제공합니다.

 

📚 출처

공동환(2012), 뇌를 자극하는 C++ STL, 한빛미디어.

'𝐏𝐑𝐎𝐆𝐑𝐀𝐌𝐌𝐈𝐍𝐆 > 𝐂++' 카테고리의 다른 글

C++ :: STL set 컨테이너  (0) 2020.09.17
C++ :: STL list 컨테이너  (0) 2020.09.15
STL :: 시퀸스 컨테이너(1)  (0) 2020.09.12
C++ :: STL이란?  (0) 2020.09.08
C++ :: 예외처리(try, catch, throw)  (0) 2020.09.02
Comments