바로 질문으로 시작하자.
1. 다음 코드가 정상적으로 작동 하는가? 그렇다면, 어떻게 개선 할 수 있는가?
정상적으로 작동한다. 약간 위험해 보이는 코드이기 때문에, iterator를 이용해서 사용 하는 편이 더 안전하다고 생각 될 수 있다. 하지만 .. iterator 쓰기가 부담스러울 때가 있는데, 그때 포인터를 사용 할 수 있겠다.
여기서 왜 iterator가 더 안전하냐하면, 확인과정을 거치면서 이동할 수 있기 때문이다. 그리고 뭐가 더 좋고 뭐가 더 좋다는 말은 못하겠다. 때에 따라서 좋은게 좋은거로 되기 때문이다.
2. 다음 코드는 유효한가? 설명하라.
유효 할 수도 있고, 안유효 할 수도 있다.
유효하기 위해선 다음의 조건을 만족 해야 한다.
- &t[0] 을 위해선, T::operator[]() 가 존재해야 하며, operator&()가 되어야 한다.
- T::value_type 을 보기 위해서 T::value_type 이 존재 해야 한다.
- t.begin() 을 위해서 T::begin() 이 있어야 한다.
- *t.begin() 을 위해서 operator*() 가 있어야 한다.
- &*t.begin() 을 위해서, operator&() 가 있어야 한다.
총평
후반부를 보게 되면 std::vector<bool> 에 대해서 나오게 되는데, .. 어지간해선 쓰지 말라고 한다. 음~
'책 정리 > More Exceptional C++' 카테고리의 다른 글
항목 11 : Mastermind (난이도 : 8 ) (0) | 2008.12.23 |
---|---|
항목 10 : 템플릿 특화(specialization)과 오버로딩(overloading) ( 난이도 : 6 ) (0) | 2008.12.23 |
항목 9 : 똑같은 코드? ( 난이도 : 5 ) (0) | 2008.12.23 |
항목 8 : set과 map 사용하기 ( 난이도 : 5 ) (0) | 2008.12.22 |
항목 7 : vector와 deque 사용하기 ( 난이도 : 3 ) (0) | 2008.12.22 |
항목 5 : typename ( 난이도 : 7 ) (0) | 2008.12.22 |
항목 4 : 확장 가능한 템플릿 : 상속을 통해서 아니면 특성(traits) 클래스를 통해서? ( 난이도 : 7 ) (0) | 2008.12.22 |
항목 3 : 판단자(predicate) Part 2 : 상태와 판단자 ( 난이도 : 7 ) (0) | 2008.12.20 |
항목 2 : 판단자(predicate) Part 1 : remove()가 삭제 하는 것은? (난이도 : 4 ) (0) | 2008.12.19 |
항목 1 : 스트림 전환(Switching Streams) ( 난이도 : 2 ) (0) | 2008.12.19 |
최근댓글