본문 바로가기

Programming

이펙티브 STL_2

[Effective STL] 2006스콧 마이어스 저
" C++ 표준 템플릿 라이브러리를 효과적으로 활용하는 50가지의 명쾌한 테크닉 모음

 

 

항목 9 데이터를 삭제할 때에도 조심스럽게 선택할 것이 많다.

vector. string. deque의 경우 erase-remove 사용

 

list.의 경우 remove가 효율적.

 

set, multiset, map dlf ruddn remove류의 맴버 함수가 없고 , remove를 사용하면 컨테이너를 변형시키는 경우가 있음

= erase 사용

 

삭제 하는 방법

1. 리스트 내 요소 삭제 하기

ex) vector 의 경우 erase 할 경우 iterator로 지우기 전에 가리키고 있던  iterator를 다음으로 옮겨야 한다.

2. 삭제한 리스트 만든 후 복사해 옮기기

 

 

항목 10. 할당자의 일반적인 사항과 제약 사항에 대해 잘 알아두자

항목 11. 커스텀 할당자를 제대로 사용하는 방법을 알아보자

 

 

항목 12. STL 컨테이너의 쓰레드 안전성에 대한 기대는 현실에 맞추어 가지자.

STL 다중 쓰레드 지원에서 기대할 수 있는 것

1. 여러 쓰레드에서 읽는 것은 안전하다.

2. 여러 쓰레드에서 다른 컨테이너에 쓰는 것은 안전하다.

 

+추가로 필요한 것

1. 컨테이너의 맴버 함수를 호출하는 시간 동안  컨테이너 락 걸기

2. 컨테이너가 만들어 내어 주는 반복자의 유효 기간 동안 컨테이너에 락 걸기

3. 컨테이너에 대해 실행된 알고리즘 내내 락 걸기

 

13. 동적으로 할당한 배열보다는  vector와 string이 낫다.

14. reserve는 필요없이 메모리가 재할당되는 것을 막아준다

realloc 이 될 경우

1. 컨테이너 용량의 몇 2 배 증가율 만큼 용량을 늘린다.

2. 컨테이너가 원래 가지고 있던 메모리에 저장된 요소를 새 메모리에 복사한다.

3. 원래 메모리를 소멸 시킨다.

 

'Programming' 카테고리의 다른 글

stack_1  (0) 2022.08.14
이펙티브 STL_3  (0) 2021.03.07
이펙티브 STL_1  (0) 2021.01.31
이펙티브 모던 C++_8  (0) 2020.12.20
이펙티브 모던 C++_7  (0) 2020.12.13