컨테이너에서 방문자의 현재 위치를 저장하기 위해 STL과 같은 반복기를 사용하여 C++로 Visitor 패턴을 구현했습니다. 이제 컨테이너를 반복하는 동안 컨테이너를 변경하고 싶습니다. 컨테이너에서 항목을 삭제하는 데 특히 관심이 있습니다. 현재 컨테이너에있는 항목까지도 삭제하려고합니다.방문자를 사용하는 동안 컨테이너 변경
이제 분명히이 항목을 가리키고 있기 때문에 방문자 내부 반복기가 무효화됩니다. 현재 컨테이너에 모든 반복자 목록을 저장하고 목록에 항목이 추가되거나 목록에서 제거되는 즉시 업데이트합니다. 따라서 이것은 반복자 (Observer)와 목록 (Observable)에 적용된 Observer 패턴과 유사합니다.
또는 방문객() 메소드가 방문객에게 현재 항목에 어떤 일이 발생했는지 반복 처리하는 방법에 대한 힌트를 반환하는 것으로 생각했지만 방문()이 너무 좋았 기 때문에 방문객 구현은 실제로 다음 항목을 찾는데 신경 쓰지 않아야합니다.
그럼, 내 질문은 : 방문자가 컨테이너에 추가되거나 컨테이너에서 제거 된 경우에도 방문자를 계속 유지하는 가장 좋은 방법은 무엇입니까?
감사합니다, 플로리안
업데이트 :이 컨테이너를 통해 실행 한 방문자는하지만 방문() 메소드의 내부에 추가 반복자의 수는 같은 컨테이너에서 사용할 수 있습니다. 컨테이너의 항목 중 하나가 삭제 된 visit() 호출에서 돌아온 후에도 방문자가 컨테이너의 나머지 항목을 계속 사용하기를 원합니다.
귀하의 설명에 다소 혼란 스럽습니다. 방문객이 변경 될 때마다 업데이트해야하는 컨테이너를 통해 여러 방문자가 방문하고 있습니까? 방문객이 아닌 사람이 컨테이너에 변경 사항이있을 때마다 방문자의 직위를 재확인하기를 원하십니까? 또는 한 번에 한 명의 방문자 만 있고 그 컨테이너의 요소를 방문한 후에 방문자가 항상 유효한 반복자를 사용해야한다고 말했습니까? –
나는 또한 혼란 스럽다. STL 컨테이너를 통해 방문자를 구현 한 방법에 대한 더 큰 설명 (또는 코드)이 여기에 도움이 될 수 있다고 생각합니다. 방문자가 객체, 객체 및 반복자를 수락한다는 것은 무엇입니까? 다음 요소를 방문하도록 이터레이터를 변경하는 사람은 누구입니까? –