1장 일반화 프로그래밍과 C++ 표준 라이브러리 Item 1: 스트림 전환(Switching Streams) Item 2: 판단자(predicate) Part 1: remove()가 삭제하는 것은? Item 3: 판단자(predicate) Part 2: 상태와 판단자 Item 4: 확장 가능한 템플릿: 상속을 통해서 아니면 특성(traits) 클래스를 통해서? Item 5: Typename Item 6: 컨테이너, 포인터 그리고 컨테이너가 아닌 컨테이너 Item 7: vector와 deque 사용하기 Item 8: set과 map 사용하기 Item 9: 똑같은 코드? Item 10: 템플릿 특화(specialization)와 오버로딩(overloading) Item 11: Mastermind 2장 최적화..
책 정리/More Exceptional C++ 검색 결과
.. 음 얼마전 이 부분에 대해서 정리했던게 새록 새록 기억이 새어 나온다. 빠르게 질문해보자. 1. 템플릿 특화는 무엇인가? 예를 들어라. .. 특수화된 템플릿이다. 참조 : http://www.ikpil.com/767 2. 부분 특화는 무엇인가? 예를 들어라. .. 특수화를 부분적으로 한게 부분 특화 이다. 3. 다음 선언을 살펴보자. #include template void g( T1, T2 );// 1 template void g( T ); // 2 template void g( T, T ); // 3 template void g( T* ); // 4 template void g( T*, T );// 5 template void g( T, T* );// 6 template void g( int, ..
함수 매개변수를 후위증가 시키는것과 같은 간단한 코드 차이도 결과에 큰 영향을 미칠수 있다는 것을 보여 주는 항목이다. ... 바로 질문 넘어가자. 1. 다음 코드가 하는 일을 설명하라. f( a++ ); f의 경우 1. f가 함수 일 경우, 내부적으로 a의 타입에 맞는 복사 생성자가 호출되어, a와 똑같은 임시객체가 생성되고, 자신을 증가시킨 후, 임시객체를 a++ 자리에 올려 두고 f()에 전달한다. 또한 표준에 의하여, 임시객체를 non-const 로 받을수 없기 때문에 f는 const reference나 복사 생성자를 이용하여 전달해야만 할 것이다. 2. f가 매크로 함수(#define 함수)라면, 경우에 따라서 a가 여러번 호출 될 수 있다는 점이다. 3. f가 객체라면, 1번과 마찬가지 4. ..
바로 질문 들어간다. 1. a) 다음 코드의 문제점은 무엇이고, 어떻게 수정할 수 있을까? #include #include int main( void ) { std::map m; std::map::iterator i = m.find( 13 ); if( i != m.end() ) { const_cast( i->first ) = 99999; } return 0; } 딱 봐도 문제인것은 키 값을 강제로 변경 시키고 있다. map은 자동 정렬 되기 때문에, 이렇게 key 를 바꾸게 되면, 큰 문제가 생기게 되므로 절대 해야 하지 말아야 한다. 만약 키를 바꾸고 싶다면, 다음 코드처럼 해야 한다. b) 다음의 코드를 쓰면 어느 정도까지 문제가 해결 될까? #include #include int main( void..
바로 질문 들어가자. 1. 표준 라이브러리에서 vector와 deque는 유사한 기능을 한다. 그렇다면 둘 중 어떤 컨테이너를 써야 할까? 이유는? 둘 중 하나를 골라서 써야 하는 상황은? 음.. 그림으로 표시 바로.. 출처는 http://www.cplusplus.com/reference/stl/ 이다 2. 다음 코드는 어떤 결과를 보여 주나? #include std::vector c ( 10000 ); c.erase( c.begin() + 10, c.end() ); c.reserve( 10 ); 풀이를 하자면 C를 초기에 10000까지 늘리고, 10개 후부터 끝까지 지운 후에 공간을 10으로 만든다. 하지만.. 실제 공간이 10으로 줄여주는것이 아니므로, 줄여주기 위한 목적이라면 resize( 10 )..
최근댓글