deque 컨테이너
deque는 vector와 유사성이 있는 듯 하면서도 상당히 많이 다르다고 할 수 있는 시퀀스 컨테이너다. 우선, Random access iterator를 통한 개별 원소에 대한 접근이 가능하다. operator []도 지원되며 컨테이너의 크기 역시 동적으로 조절되지만, 그 방법은 vector와 많이 다르다.
장점 : 개별 원소들을 인덱스로 접근이 가능하다. 원소를 컨테이너의 끝 뿐 아니라, 앞에서도 삽입 및 제거하는 것이 빠르고 어떠한 순서로도 원소들을 순회할 수 있다.
단점 : 컨테이너 시작 및 끝 위치가 아닌 곳에서 삽입 및 제거 수행 시에 그 성능은 list에 비해 현저히 떨어진다.
vector와 deque의 차이점
1. vector는 끝에 삽입 및 제거하는 것이 빨랐지만, deque는 끝뿐아니라 처음 부분에서의 삽입 및 제거도 효율이 높다.
2. vector의 경우 내부 크기가 고갈되면 이를 확장하기 위해 전체 메모리만큼 할당을 하는데 deque의 경우 일정 크기를 가지는 chunk 단위로 확장되는 방식을 가지고 있따.
생성자
1. deque<T> d;
- 타입이 T인 비어있는 deque d를 생성한다.
2. deque<T> d(otherDeque);
- otherDeque를 복사해 d를 생성한다.
3. deque<T> d(num);
- num의 값으로 사이즈가 num인 d를 생성한다.
4. deque<T> d(num, val);
- num의 값으로 사이즈가 num인 d를 생성한다. 각각 val의 값으로 초기화된다.
5. deque<T> d(inIterBegin, inIterEnd);
- d는 반복자 구간 (inIterBegin, inIterEnd)로 초기화된 원소를 갖는다.
멤버 함수
1. dq.assign(n,x)
- dq에 x 값으로 n 개의 원소를 할당한다
2. dq.assign(b,e)
- dq를 반복자 구간 [b,e)로 할당한다.
3. dq.at(i) dq의
- i번째 원소를 참조한다
4. dq.back()
- dq의 마지막 원소를 참조한다.
5. p=dq.begin()
- p는 dq의 첫 원소를 가리키는 반복자다
6. dq.clear()
- dq의 모든 원소를 제거한다.
7. dq.empty()
- dq가 비었는지 조사한다.
8. p=dq.end()
- p는 dq의 끝을 표식하는 반복자다
9. q=dq.erase(p)
- p가 가리키는 원소를 제거한다. q는 다음 원소를 가리킨다.
10. q=dq.erase(b,e)
- 반복자 구간 [b,e)의 모든 원소를 제거한다. q는 다음 원소다
int main()
{
std:: deque <int> deque;
deque.reserve(3);
deque.push_back(1);
deque.push_back(2);
deque.push_back(3);
for (int i = 0; i < deque.size(); i++) {
std::cout << deque[i] << std::endl;
}
}
/*
출력값:
1
2
3
*/
int main()
{
std:: deque <int> deque;
deque.push_back(1);
int a = deque.at(0);
std::cout << a;
return 0;
}
/*
출력값:
1
*/
int main()
{
std:: deque <int> deque;
deque.push_back(1);
deque.push_back(2);
int a = deque.back();
std::cout << a;
return 0;
}
출력값:
2