티스토리 뷰

item1은 어떠한 상황에서 적절한 STL을 선택할것인가에 대한 주제입니다.



1. 임의의 위치에 삽입할 일이 잦다면( vector::insert() ) 순차 컨테이너를 선택한다. 

  - 연관 컨테이너는 이러한 작업을 할 수 없다. 단, insert와 같은 작업은 많은 비용이 발생하므로 신중해야 한다.

     (insert가 발생하면 모든 원소들을 이동시켜야한다. )


2. 컨테이너에서 순서가 중요하지 않다면 hashed 컨테이너를 사용한다. (c11에서는 unordered로 변경 됨)


3. c++표준에 꼭 맞춰야 한다면 hashed 컨테이너와 slit, boost::rope는 사용하지 않는다.


4. 원소의 이동이 잦다면 연관메모리 컨테이너는 피하자. (1번과 배치되는 내용이며 선택에 주의가 필요하다. 상황에 맞게 선택이 필요)


5. 속도가 매우 중요한 선택의 요소라면 hashed 컨테이너를 사용한다.


6. 트랜잭션 기능이 필요하다면 node-based 컨테이너를 사용한다. (list)


7. iterator, pointer, reference의 invalidation의 영향을 최소화 하고 싶다면 node-based컨테이너를 사용한다.

 -stl에서 invalidation은 https://stackoverflow.com/questions/3345003/what-does-container-invalidation-in-c-mean 참고.

 요약하자면 순차 메모리를 사용하는 컨테이너에서 삽입,삭제에 따른 메모리 재할당으로 발생하는 포인터 무효화를 의미한다.


8. 순차 메모리를 사용하면서도 invalidation을 피하고 싶다면 deque를 사용한다. deque는 툭별히 pop_back, push_back에서만 

   invalidation이 발생한다.


9, 10...은 아직 해석이 되지 않습니다. 차례로 공부하면서 알게되면 추가하겠습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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 30
글 보관함