[Effective STL] 2006스콧 마이어스 저
" C++ 표준 템플릿 라이브러리를 효과적으로 활용하는 50가지의 명쾌한 테크닉 모음
항목 15. 잊지말자 string은 여러가지 방식으로 구현되어 있다는 사실을
- string의 크기가 char*의 크기보다 7배 넘는 경우가 있다고 한다 어떤 경우일까!?!
항목 17. 쓸데없이 남은 용량은 바꿔치기(swap)를 사용하자
항목 18. vector<bool> 보기를 돌같이 하자
- 압축 데이터 형식을 사용하기 때문에 bool 객체가 들어있지 않고 하나 하나의 비트로 담겨 있음
항목 24. map::operator[]나 map::insert는 표율 문제에 주의하여 선택하자
map::operator[]의 경우:
- 추가 or 갱신의 역할
- 해당 맵에 key가 있는지 확인한다.
- 없다면 새로 만들어서 추가된다.
- 있다면 매핑된 값이 v로 갱신된다.
*map::insert를 사용할 경우 임시 객체를 만드는데 필요한 기본 생성자, 소멸자, 대입 연산자 함수가 절약된다.
*반면 갱신의 경우 pair 객체를 사용하지 않는 []을 사용하는 것이 효과적이다.
항목 32. 요소를 정말로 제거하고자 한다면, remove 류의 알고리즘에는 꼭 erase를 붙여 사용하자
remove함수는 실제로 값이 지워주지 않는다.
vector<int> list;
list = {1,77,3,4,5,77,6}
list.remove(77); // 1,3,4,5,6,77,77
// 77이 있던 자리에 값을 채워주고 77은 뒤쪽으로 배치만 함
list.erase(remove(list.begin(), list.end(), 77), list.end()); // 1,3,4,5,6
항목 34. 정렬된 범위에 대해 동작하는 알고리즘이 어떤 것들인지 파악해두자
정렬되어야 동작하는 알고리즘 리스트
binary_search
lower_bound
upper_bound
equal_range
set_union
set_intersection
set_difference
set_eymmetric_difference
merge
inplace_merge
includes
'Programming' 카테고리의 다른 글
stack_2 (0) | 2022.08.14 |
---|---|
stack_1 (0) | 2022.08.14 |
이펙티브 STL_2 (0) | 2021.02.07 |
이펙티브 STL_1 (0) | 2021.01.31 |
이펙티브 모던 C++_8 (0) | 2020.12.20 |