일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 stl
- c++
- 다형성
- 메타테이블
- operator new
- 언리얼
- Effective c++
- 오블완
- more effective c++
- UE4
- reference
- Vector
- virtual function
- 반복자
- Smart Pointer
- 비교 함수 객체
- 영화 리뷰
- lua
- 루아
- 티스토리챌린지
- exception
- 참조자
- 게임
- implicit conversion
- 영화
- resource management class
- 스마트 포인터
- 예외
- 암시적 변환
- 상속
- Today
- Total
목록개발 (178)
스토리텔링 개발자
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 참조)..
항목 35. C++ 언어의 최신 표준안과 표준 라이브러리에 대해 익숙해지자. 레거시 C++(C++98/03) 라이브러리 범주표준 C 라이브러리를 그대로 지원문자열(string) 지원지역화(localization) 지원입출력 스트림 라이브러리 변경숫자 조작을 돕는 데이터 타입 지원복소수(complex)숫자 데이터 배열 클래스(valarray)숫자 조작 함수(부분합(partial sum), 인접차(adjacent difference) 구하기)STL(표준 템플릿 라이브러리(Standard Template Library)) 지원타입에 상관 없이 쓸 수 있는 일반 용도의 컨테이너와 알고리즘 표준 C++ 라이브러리의 두 가지 특징표준 라이브러리에 속해 있는 대부분의 것들은 템플릿으로 만들어져 있다.std::..
항목 34. 한 프로그램에서 C++와 C를 함께 사용하는 방법을 이해하자. 네임 맹글링(Name Mangling)C++ 컴파일러가 내부 호출용 이름을 만들어 함수마다 붙이는 동작.이 동작은 C에서는 발생하지 않는다.C에서는 함수 오버로딩이 발생하지 않기 때문이다.즉, 이름이 같은 함수란 존재하지 않는다.하지만 C++에서는 이름이 같은 함수를 부지기수로 볼 수 있다.사실, 오버로딩된 함수는 링커를 통과할 수 없다.같은 이름의 여러 함수를 구분할 수 없기 때문이다.그렇기 때문에 네임 맹글링을 사용한다.C로 제작한 라이브러리 함수를 C++에서 사용한다면?아래와 같은 C 라이브러리가 있다면..void drawLine(int x1, int y1, int x2, int y2);// C++ 컴파일러가 네임 맹글링..
항목 33. 상속 관계의 말단에 있지 않은(non-leaf) 클래스는 반드시 추상 클래스로 만들자 대입 문제class Animal{public: Animal& operator=(const Animal& rhs); ...};class Lizard : public Aanimal{public: Lizard& operator=(const Lizard& rhs); ...};class Chicken : public Animal{public: Chicken& operator=(const Chicken& rhs); ...};Lizard liz1;Lizard liz2;Animal* pAnimal1 = &liz1;Animal* pAnimal2 = &liz2;...*pAnimal1 = *..