C ++를 다시 사용하고 최근에 작성한 간단한 Java 프로그램을 변환하려고합니다.
C ++에서 Java ArrayList에 해당하는 것이 선호되는 것은 무엇입니까?
답변:
표준 라이브러리 의 std::vector
클래스 를 사용하십시오 .
std::list
.하지만 인덱싱 가능성 (no operator[]
) 을 잃어 버리 므로 실제로는 배열이 아닙니다. list
그것은 vector
종종 더 나은 선택 과 같은 고유 한 특성을 가지고 있습니다. 표준 C ++ 컨테이너에서는 어떤 방식 으로든 타협해야합니다. 좀 deque
더 나은 성능을 제공 할 수 있습니다. 그것은의 (상대적으로) 쉽게 측정 할 vector
대 deque
대 list
가 코드에서 주로 상호 교환으로 - 당신의 컨테이너 예에 대한 형식 정의를 사용합니다 typedef vector<MyObj> MyList
.
ArrayList
는 이름에서 짐작할 수 있듯이 연결 목록으로 구현되지 않습니다. 당신은 LinkedList
. 또한 목록에서 추가 및 제거 된 개체의 회전율이 상당히 높 vector
더라도 list
처음에 다시 할당 할 필요가없는 충분한 공간을 할당하는 것보다 훨씬 빠를 수 있습니다 (예 : 필요한 최대 공간).
여기에서 몇 가지 추가 포인트를 다시 사용 vector
합니다.
Java 와 달리 ArrayList
, Array
를 vector
배열 로 취급하기 위해 특별한 작업을 수행 할 필요가 없습니다 . C ++의 기본 스토리지는 연속적이고 효율적으로 인덱싱 할 수 있습니다.
와 달리 ArrayList
a vector
는 완전한 객체로 캡슐화하지 않고 기본 유형을 효율적으로 보유 할 수 있습니다.
에서 항목을 제거 할 때 제거 vector
된 항목 위의 항목을 아래로 이동하여 연속적인 저장 공간을 유지해야합니다. 이는 대형 컨테이너의 경우 비용이 많이들 수 있습니다.
vector
복사 생성자와 할당 연산자가 효율적인에 복잡한 객체를 저장하는지 확인하십시오 . 내부적으로 C ++ STL은 컨테이너 하우스 키핑 중에이를 사용합니다.
reserve()
나중에 확장 할 때 메모리 재 할당을 최소화하기 위해 스토리지를 사전에 (즉, 벡터 생성 또는 초기화시) Java에서 C ++로 전달하는 것에 대한 조언 .