insert를 사용하기 위해서 반복자를 어떤 식으로 다루어야 하나요?
글쓴이: dltkddyd / 작성시간: 수, 2014/03/05 - 7:59오후
지금 deque를 sdeque라는 클래스로 구현하고 있습니다. deque가 말 그대로 double ended que, 즉 양방향으로 끝나는 큐라고 하기에 sdeque에는 역참조 포인터를 두 개를 두어서 구현했습니다. 그런데 마지막에 반복자에서 조금 문제가 생깁니다. 표준의
template <class InputIterator> void insert (iterator position, InputIterator first, InputIterator last);
를 구현하던 중에 문제가 생기네요. 저는 두 개의 역참조를 사용하기 때문에 첫 번째는 순방향으로 진행하지만 두 번째는 역방향으로 진행해야 합니다. 그런데 하나의 역참조만 deque에서 사용할 때는 문제가 생기지 않지마 두 개의 역참조를 사용할 때는 문제가 발생합니다. 두 개로 쪼개져서 컨테이너와 전혀 상관없는 공간을 지나치지 않고 컨테이터가 사용하는 포인터의 공간만을 참조하려면 어떻게 해야 할까요? begin()과 end()라는 멤버함수를 사용할 때는 순방향의 역참조로 모든 데이터를 모아서 처리하도록 했습니다. 그러나 operator[]을 사용할 경우
&obj[num]라는 식으로 두 번째와 세 번째에 전달할 때는 간격을 어떻게 처리해야 할 지 난감합니다. operator[]에서도 begin(), end()에서 처럼 하나로 합쳐주는 것이 가능하겠지만 그렇게 하면 읽고 쓰는 속도가 현저히 떨어지는 경우가 생기던데요. 함치지 않고 처리할 수 있는 방버이 없을까요?
Forums:
댓글 달기