[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 |