그래서 서로 다른 형식과 구조로 조정해야하는 두 가지 목록이 있습니다. 기본적으로 집합 B는 집합 A에있는 내용과 일치해야하지만 집합 B에있는 기존 항목의 상태를 보존하고 집합 A에있는 항목으로 덮어 쓰지는 않습니다.두 목록을 조정하십시오.
참고로 목록은 실제로 목록을 의미하지 않습니다 . "목록"은 직선 배열에서지도에 이르는 두 가지 형태로 제공됩니다. 모두 표준 요소 반복자를 사용하여 요소에 액세스합니다. 나는 일반적으로 처리
방법이 작동하고 내가 그것을 수행하는 생각할 수있는 유일한 방법입니다
for item in listA
if listB contains item
mark item in list B as visited
else
add item to list b
for item in listB
if visited is true
continue
else
add item to removeList
for item in removeList
remove item from list B
...과 같이합니다. 나는 반복해야 할 반복을 얼마나 많이 반복하는지에 대해 싫어한다. 그러나 반복자를 사용하고 있기 때문에 목록을 검사하는 동안 목록에서 아무 것도 제거 할 수 없으며 목록에서 세 번째 제거 목록에 추가해야합니다.
잠정적 인 답은 속도와 메모리 사용 공간이 코드를 작성하는 것이 얼마나 쉬운지를 명심하십시오.
내 질문은 정말이까지 내려 간다. 내가 생각할 수없는 더 좋은 방법이 있는가?
나는 어떤 해결책이 아마도 언어 불가 지론이 될 것이라고 생각하지만, 나는 C++/C FWIW에있다.
감사합니다.
"contains"는 상수 또는 적어도 시간 연산입니다. 방문자 B로 표시된 항목을 즉시 방문한 적이 없다고 표기하는 대신에 제거 할 수없는 이유는 무엇입니까? 약간의 작업만으로, 반복자가이 권한을 처리 할 수 있다고 확신합니까? –
그건 내 주요 관심사 였어. STL 반복자에 대한 필자의 이해는 반복되는 동안 기본 데이터 구조를 (제거 또는 삽입과 관련하여) 만질 수 없다는 것이 었습니다. 내가 생각할 수있는 모든 "수정"은 제거 목록을 반복하는 것보다 비용이 많이 들며 일반적으로 매우 작습니다. –
STL 컨테이너에서 "제거"를 호출하면 가로 채기를 계속할 수있는 새로운 반복기가 제공됩니다. 상황이 가속화되는지 확인해보십시오. –