개발/C++

[C++] deque 컨테이너

hojak99 2016. 12. 22. 22:31

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


반응형