3.1.5 vector를 인덱스 연산으로 사용

vector는 확장 가능한 배열로 연속적인 메모리에 자료를 보관하는 자료구조입니다. 연속적인 메모리에 자료를 보관하기 때문에 메모리의 시작 위치에서 상대적 거리를 통해 원하는 요소를 접근하게 프로그래밍하면 접근 비용이 거의 들지 않습니다.

프로그래밍 언어에서 제공하는 배열은 거의 모두 인덱스 연산을 사용하여 배열의 원소에 접근하는 것을 제공하고 있습니다.

STL의 vector에서도 인덱스 연산을 제공합니다. 주의할 점은 vector에는 저장소의 크기와 보관한 자료 개수를 기억하는 멤버가 있는데 인덱스 연산으로 사용할 때는 0에서 보관한 자료 개수 -1 까지 사용할 수 있어요. 따라서 보관한 자료에 접근하거나 변경할 때만 사용할 수 있다는 것입니다.

따라서 STL의 vector를 인덱스 연산으로 사용할 때는 미리 보관할 최대 개수만큼 디폴트 값(대부분 0이 적합하겠죠.)을 보관해 두었다가 원하는 자료로 변경하는 형태로 사용하면 좋습니다.

 

앞에서 작성했던 프로그램을 다시 한 번 인덱스 연산으로 사용하는 프로그램을 만들어 보기로 해요.

작성할 프로그램은 장르 관리 프로그램입니다. 장르에는 장르 번호와 장르명이 있습니다. 최대 장르 번호는 프로그램 시작하면서 입력받습니다. 장르 번호와 장르명은 사용자에게 입력받습니다. 장르 번호와 장르명으로 삭제할 수 있고 검색할 수 있습니다. 그리고 모든 장르 목록을 확인할 수 있습니다.

제공할 기능을 살펴보면 장르 추가, 장르 번호로 장르 삭제, 장르명으로 장르 삭제, 장르 번호로 검색, 장르명으로 검색, 모든 장르 목록 확인이 있어요.

먼저 App 클래스에 최대 장르 번호를 기억할 멤버 필드를 선언하세요.

 

 

이제 추가 기능을 구현합시다.

 

이제 번호로 장르 삭제 기능을 구현합시다.

 

이름으로 장르 삭제 기능을 구현합시다. 앞에서 검색에 사용할 EqualerByName 클래스를 수정해야 합니다.

 

 

번호로 장르 검색 기능을 구현합시다. 번호로 장르 삭제 기능과 찾는 부분까지는 똑같습니다.

 

이름으로 장르 검색 기능은 순차적으로 보관이나 특정 키 순으로 보관할 때와 같습니다. 물론 find_if 알고리즘에 전달할 EqualerByName 형식을 변경했기 때문에 같은 것일 뿐입니다.

 

장르 목록 보기를 구현합시다. 인덱스 연산을 통해 유효한 값이 있는 요소를 출력하세요.

 

소멸자도 같은 방법으로 유효한 값이 있는 요소만 소멸하세요.