C++ - deque
2022. 8. 7. 01:31ㆍSTUDY/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
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 |