2013-08-29 1 views
0

연산자 과부하 - =std :: vectors를 사용하지 않고 연산자 - =를 사용하여 동적으로 할당 된 객체 배열에서 요소를 제거하는 방법?

렌터카에서
RentACar& operator-=(const Automobile& av) 

나 자동차의 동적으로 할당 된 어레이가 *는

그래서 어떤 a 다음 av.brand와 동일한 a.brand을 가지면 제거되어야한다고 말할 수

한 객체에 할당 된 메모리가 해제됩니다.

나는 sth라고 생각했다. 그것은 동일한 브랜드를 가진 객체를 찾지 못한다면 * 반환하지만, 만약 그렇다면 a-1 크기의 새로운 자동차 배열에 공간을 할당하고, 객체를 할당하고, 동일한 브랜드의 객체를 건너 뜁니다.하지만 그것을 쓰는 방법을 모른다.

벡터로 작성하는 방법을 모르겠지만 어쨌든 나는 시험을 위해 공부하고 우리는 시험에 사용할 수 없으므로 벡터를 사용하지 않았다. 그래서 나는 이것을해야한다. 그것은 바보 같은 구현입니다!

감사합니다.

+4

그건 남용 연산자 오버로드 101입니다. Find_and_remove 또는 이와 비슷한 멤버 함수를 사용하십시오. – jrok

+0

배열에서 요소를 삭제하는 것이 비효율적 인 경우 연결된 목록을 고려하십시오. – HAL

+0

내가 sth을 안다면. 내가 그랬던 것처럼! – STEFS

답변

2

첫째, 당신은 제거 할 개체를 찾을 수있다 : std::find_if이 좋다,하지만이 수업 내용 인 경우, 그들은 는 선형 검색 자신의 구현을 작성 할 것으로 예상 할 수있다. 항목을 찾았 으면 포인터를 delete으로 설정하고 null로 설정하고 (배열에 널 포인터가있는 경우 이 올바르게 작동하는지 확인하십시오) 다음 항목을 모두 하나씩 아래로 이동하십시오 . (std::copy은 쉬프트에 사용 된 일 수 있습니다.) 물론, 이동하면 배열의 유효한 항목이 어디에서 발생했는지 계속 추적 할 수 있습니다 ( ).

개체를 제거 할 때 새 배열을 만들 이유가 없습니다. 배열의 논리적 끝을 추적하면됩니다.