C++/뇌를 자극하는 C++ STL

뇌를 자극하는 C++ STL 이것만은 알고 갑시다 6장

꾸준함. 2018. 1. 7. 17:51

1. vector 컨테이너의 특징

i) 시퀀스 컨테이너입니다.

iii) 배열 기반 컨테이너입니다.

v) 임의 접근 반복자를 제공합니다.

vi) reserve() 멤버 함수를 제공합니다.


2. deque 컨테이너의 특징

i) 시퀀스 컨테이너입니다.

iii) 배열 기반 컨테이너입니다.

iv) 컨테이너 앞, 뒤로 추가/제거가 가능합니다.

v) 임의 접근 반복자를 제공합니다.


3. list 컨테이너의 특징

i) 시퀀스 컨테이너입니다.

ii) sort(), splice() 멤버 함수를 제공합니다.

iv) 컨테이너 앞, 뒤로 추가/제거가 가능합니다.

vii) 빠른 시간(상수 시간)에 원소를 삽입, 삭제할 수 있습니다.


4. 10 100 20 30 40 50 N


5. size: 5, capacity: 10


6. clear() 멤버 함수 사용 시 size: 0, capacity: 5

   size, capacity 모두 0으로 만들려면 swap을 사용하여 할당 메모리를 제거해야한다.


7. 공통점: 임의 위치의 원소를 참조한다. 

   차이점: [] 연산자는 범위 점검을 하지 않고 at() 멤버함수는 범위를 점검한다.(속도와 정확성의 차이)


8. vector와 deque의 가장 큰 차이점은 컨테이너의 앞에서 추가/제거 가능 유무이다.(deque가 가능)


9. vector는 배열 기반 컨테이너이고 list는 노드 기반 컨테이너다.


10.1 vector가 제공하는 반복자: 임의 접근 반복자, list가 제공하는 반복자: 양방향 반복자

10.2 vector와 list의 공통점: 시퀀스 컨테이너이다.

10.3 vector는 erase()를 실행할 때 원소를 밀어내지만 list는 erase()를 실행할 때 노드만 연결시키면 된다.(실행속도의 차이) O(n) vs O(1)

10.4 마찬가지로 vector는 insert()를 실행할 때 원소를 밀어내지만 list는 erase()를 실행할 때 노드만 연결시키면 된다.(실행속도의 차이) O(n) vs O(1)


11. 시퀀스 컨테이너 중 vector와 deque는 sort() 알고리즘을 사용하여 빠르게 정렬할 수 있지만, list는 sort() 알고리즘을 수행할 수 없다. sort() 알고리즘은 임의 접근 반복자를 지원하는 컨테이너만 사용할 수 있기 때문이다. 따라서 list는 자체 정렬 멤버 함수 sort()를 제공한다.


12. insert는 기존의 list를 유지한채 복사를 해오기 때문에 실행속도가 살짝 느리다. splice는 실행속도가 비교적 빠른 대신 기존 list를 유지시키지 않는다.


[참고] 뇌를 자극하는 C++ STL


반응형