바로 질문으로 시작하자.

1. 다음 코드가 정상적으로 작동 하는가? 그렇다면, 어떻게 개선 할 수 있는가?

정상적으로 작동한다. 약간 위험해 보이는 코드이기 때문에, iterator를 이용해서 사용 하는 편이 더 안전하다고 생각 될 수 있다. 하지만 .. iterator 쓰기가 부담스러울 때가 있는데, 그때 포인터를 사용 할 수 있겠다.

여기서 왜 iterator가 더 안전하냐하면, 확인과정을 거치면서 이동할 수 있기 때문이다. 그리고 뭐가 더 좋고 뭐가 더 좋다는 말은 못하겠다. 때에 따라서 좋은게 좋은거로 되기 때문이다.


2. 다음 코드는 유효한가? 설명하라.

유효 할 수도 있고, 안유효 할 수도 있다.

유효하기 위해선 다음의 조건을 만족 해야 한다.

  1. &t[0] 을 위해선, T::operator[]() 가 존재해야 하며, operator&()가 되어야 한다.
  2. T::value_type 을 보기 위해서 T::value_type 이 존재 해야 한다.
  3. t.begin() 을 위해서 T::begin() 이 있어야 한다.
  4. *t.begin() 을 위해서 operator*() 가 있어야 한다.
  5. &*t.begin() 을 위해서, operator&() 가 있어야 한다.


총평

후반부를 보게 되면 std::vector<bool> 에 대해서 나오게 되는데, .. 어지간해선 쓰지 말라고 한다. 음~


신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요