일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Effective c++
- 스마트 포인터
- 상속
- virtual function
- 영화 리뷰
- 비교 함수 객체
- 오블완
- 암시적 변환
- 티스토리챌린지
- Vector
- 영화
- UE4
- effective stl
- resource management class
- 루아
- 메타테이블
- more effective c++
- implicit conversion
- 다형성
- lua
- Smart Pointer
- 게임
- 참조자
- 반복자
- reference
- 언리얼
- 예외
- operator new
- c++
- exception
- Today
- Total
목록effective stl (45)
스토리텔링 개발자
v1에 v2의 뒤쪽 반을 채우는 가장 빠른 방법은?v1.assign(v2.begin() + v2.size() / 2, v2.end());assign 멤버 함수컨테이너의 대용을 완전히 교체하고 싶다면 이 함수를 우선적으로 고려하자.이는 범위(두 반복자를 사용하여 나타내는 요소 묶음) 단위로 동작하는 멤버 함수이다.범위 멤버 함수를 사용하지 않고 이 문제를 풀려면 루프를 사용하지 않을 수가 없다.직접 루프를 사용하는 건 지양하자. (항목 43 참조) 범위 멤버 함수(range member function)두 개의 반복자를 시작과 끝으로 하는 범위를 매개변수로 하는 멤버 함수를 말한다. 다른 해결법들다른 방법 1. 루프와 단일 요소를 사용한 코드vector v1, v2;...v1.clear();for(..
항목 4. size()의 결과를 0과 비교할 생각이라면 차라리 empty를 호출하자 size와 empty의 용법// size를 사용if(c.size() == 0)// empty를 사용if(c.empty()) empty를 선호해야 하는 이유empty는 모든 표준 컨테이너에 대해 상수 시간에 수행되지만..list 컨테이너의 경우 간혹 컴파일러에 따라 size가 선형 시간에 수행되기도 하기 때문이다.이 경우가 꽤 빈번하다. list가 상수 시간 size를 제공하지 않는 경우, 왜 그럴까.리스트의 splice 함수와 밀접한 관계가 있다.list list1;list list2;...// list2의 노드 중// 제일 먼저 5가 나타나는 부분부터// 제일 먼저 10이 나타나는 부분까지를// list1의 ..
항목 3. 복사(Copy)는 컨테이너 안의 객체에 맞게 비용을 최소화하며, 동작은 정확하게 하자 컨테이너의 요소기본적으로 STL 컨테이너는 삽입, 삭제 시 복사 처리를 한다.컨테이너가 가진 객체는 넣을 당시의 것과 같은 것이 아니다.컨테이너에서 객체를 가져와도, 컨테이너에 있었던 것이 아니다.컨테이너 내부의 객체조차도 늘 같은 것이라 보장할 수 없다.vector 등에 insert를 통해 데이터를 삽입하거나, erase로 지우거나 하는 경우.컨테이너의 객체들은 복사를 통해 밀려나고 밀려온다.(항목 5, 항목 14 참조)정렬 알고리즘이나 그와 비슷한 매커니즘의 함수를 호출하는 경우.next_permutation, previous_permutation, remove, unique / rotate, reve..
항목 2. "컨테이너에 독립적인(container-independent) 코드"라는 환상을 조심하자 과한 일반화(generalization)의 적용코드 작성 시 일반화를 고려하게 될텐데, 이를 과하게 적용시키려 하는 것은 문제이다.컨테이너에 독립적인(container-independent) 코드를 작성하려는 욕심.모든 컨테이너에 대해 사용할 수 있도록 코드를 만든다.예컨대 vector를 사용하는 부분을 만들면서 언제든지 deque나 list를 쓸 수 있는 여지를 남긴다던가. 시퀀스 컨테이너와 연관 컨테이너를 일반화한다?대다수의 멤버 함수들은 한쪽 컨테이너에만 치우쳐 들어있다.push_back, push_front 등 : 시퀀스 컨테이너에서만 지원count, lower_bound 등 : 연관 컨테이..
항목 1. 적재적소에 알맞은 컨테이너를 사용하자 컨테이너의 종류표준 STL 시퀀스(sequence) 컨테이너vector, string, deque, list표준 STL 연관(associative) 컨테이너set, multiset, map, multimap비표준 시퀀스 컨테이너 (항목 50 참조)slist(단일 연결 리스트), rope(대용량 string)비표준 연관 컨테이너 (항목 25 참조)hash_set, hash_multiset, hash_map다만 모던 C++에서는 unordered_set, unordered_map 등을 표준으로 지원함.string 대신 사용되는 vector (항목 13 참조)간혹 이렇게 쓰면 괜찮을 때가 있다.표준 연관 컨테이너 대신 사용되는 vector (항목 23 참조)..