일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c++
- virtual function
- Smart Pointer
- 함수 객체
- 반복자
- 스마트 포인터
- 다형성
- exception
- implicit conversion
- operator new
- 암시적 변환
- 티스토리챌린지
- 영화
- lua
- reference
- 게임
- UE4
- resource management class
- more effective c++
- 참조자
- 영화 리뷰
- 언리얼
- 상속
- 메타테이블
- effective stl
- 루아
- 예외
- 비교 함수 객체
- 오블완
- Effective c++
- Today
- Total
목록전체 글 (196)
스토리텔링 개발자
항목 32. 요소를 정말로 제거하고자 한다면 remove 류의 알고리즘에는 꼭 erase를 붙여 사용하자 remove 알고리즘선언부templateForwardIterator remove(ForwardIterator first, ForwardIterator last, const T& value);보다시피, 컨테이너 자체를 받지 않는다.그렇다면 remove가 삭제를 처리하기 위해서는?삭제를 위해 제공되는 해당 컨테이너의 멤버 함수를 호출하는 방법 뿐일 것이다.하지만 실제 동작은 아래와 같다..vector v;v.reserve(10);for(int i = 1 ; i 왜냐하면 remove는 어느 것도 '진짜로' 없애지 않기 때문이다.remove는 자신이 제거하려고 하는 요소를 가진 컨테이너가 무엇인지 모르기..
항목 31. 정렬시의 선택 사항들을 제대로 파악해 놓자 sort 알고리즘은 정말 좋은 알고리즘이지만.. 늘 최적은 아니다.상황별 정렬 알고리즘을 알아보자.partial_sort항상 전체 데이터의 정렬이 필요하진 않다.예컨대 vector에서 가장 좋은 20개의 Widget만을 골라야 하는 경우라면,상위 20위까지의 Widget만을 정렬하면 된다.이럴 때 partial sort를 사용한다.bool qualityCompare(const Widget& lhs, const Widget& rhs){ // lhs의 품질이 rhs의 품질보다 좋으면 true를 반환}// 가장 뛰어난 20개의 요소를 앞에서부터 순서대로 정렬partial_sort(Widgets.begin(), widgets.begin() + 20..
항목 30. 알고리즘의 데이터 기록 범위(destination range)는 충분히 크게 잡자 컨테이너 요소 삽입 시int transmogrify(int x); // 정수 x를 받아 어떤 새로운 값을 만드는 함수vector values;... // values에 데이터를 넣는다.// values 요소들에 transmogrify를 적용하고 result에 삽입한다.// 하지만, 버그가 있다.vector results;transform(values.begin(), values.end(), results.end(), transmogrify);transform 결과 기록 순서values[0]을 매개변수로 가져온다.transmogrify를 호출하여 값을 변환한다.*results.end()에 대입한다.values..
항목 29. 문자 단위의 입력에는 istreambuf_iterator의 사용도 적절하다 텍스트 파일을 string 객체로ifstream inputFile("interastingData.txt");// inputFile을 읽어 fileData에 저장한다.// 하지만 정확한 답은 아니다.// 문법의 경우 항목 6 참조string fileData((istream_iterator(inputFile)), istream_iterator());이 경우 공백(whitespace) 문자를 객체에 복사하지 못한다..istream_iterator는 스트림을 읽을 때 operator이 연산자 함수는 공백 문자를 스킵한다.ifstream inputFile("interastingData.txt");inputFile.unset..
항목 28. reverse_iterator에 대응되는 베이스 반복자(base iterator)를 사용하는 방법을 정확하게 이해하자 대응되는 반복자 사용 예vector v;v.reserve(5);for(int i = 1 ; i ::reverse_iterator ri = find(v.rbegin(), v.rend(), 3); // ri는 3을 가리킨다.vector::iterator i(ri.base()); // i를 ri와 같은 곳을 가리키게 한다.이 코드 처리 후의 상황은 아래와 같다.왜 그럴까?reverse_iterator로는 삽입이나 삭제를 할 수 없다.(항목 26 참조)만약 ri로 99를 삽입하여 아래처럼 만들고 싶다고 하면..reverse_iterator를 삽입 함수에 사용할 수 없으므로 ri ..
항목 27. const_iterator를 iterator로 바꾸는 데에는 distance와 advance를 사용하자 const_iterator를 iterator로 캐스팅?const_iterator는 암묵적 변환이 일어나지 않으므로 직접 바꿔주어야 한다.그렇다면 캐스팅(casting)을 쓰면 될까?using IntDeque = deque;using Iter = IntDeque::iterator;using ConstIter = IntDeque::const_iterator;IntDeque d;ConstIter ci;...Iter i(ci); // 에러 발생. 암묵적 변환은 불가능하다.Iter i2(const_cast(ci); // 여전히 에러. 캐스팅이 불가능하다.const_iterator와 iterato..
항목 26. const_iterator나 reverse_iterator, const_reverse_iterator도 좋지만 역시 쓸만한 것은 iterator이다 iterator들의 관계vector에서 제공되는 함수들을 우선 보도록 하자.iterator insert(iterator position, const T& x);iterator erase(iterator position);iterator erase(iterator rangeBegin, iterator rangeEnd);모두 iterator를 매개변수로 받아들인다.이제, 네 가지 반복자 사이의 상호 변환 관계를 그림으로 보도록 하자.const_iterator가 iterator로, const_reverse_iterator가 reverse_itera..
항목 25. 해쉬 컨테이너에 대해 충분히 대비해 두자 C++11 이전의 해쉬 테이블STL에는 해쉬 연관 컨테이너가 포함되지 않았다.C++11 이후에는 unordered_set, unordered_map이 추가되었다.이 책은 모던 C++이 나오기 전이므로 표준이 아닌 해쉬 컨테이너를 기준으로 설명하고 있다.표준이기 전에 가장 대표적으로 쓰이던 것은 SGI과 딩컴웨어(Dinkumware)의 해쉬 컨테이너이다. 해쉬 컨테이너다른 연관 컨테이너와 대부분 동일하다.허나, 해쉬 컨테이너는 해쉬 함수(hashing function)을 지정해야 한다.// 해쉬 컨테이너의 일반적인 형태template >class hash_container;// SGI 버전의 hash_set의 형태// 해쉬 함수와 비교 함수에 대..