Array Class
하나의 연속된 재할당 버퍼를 사용하는 랜덤 컨테이너입니다.
template <class Type>
class Array : public RandomContainer< Type >
Template 파라미터
- Type
-
Array가 저장하는 항목들의 타입입니다.
멤버
생성자
내용 관리
Swap |
두 Array들의 내용을 교환합니다.
|
내용 쿼리
Enumerate |
Array 내용의 열거를 허용합니다.
|
Begin |
Array의 1번째 항목을 참조하는 반복자(iterator)를 리턴합니다.
|
End |
Array의 마지막 직전 항목을 참조하는 반복자(iterator)를 리턴합니다.
|
성능 튜닝
Public 타입
설명
Array는 항목들을 하나의 연속된 메모리 버퍼에 저장하는 RandomContainer 구현입니다.
public 메소드들은 비-가상이며 적절한 경우 인라인입니다.
랜덤 컨테이너 구현 중에서 Array는 다음 장점을 갖고 있습니다:
- 가장 빠른 항목 접근이 가능합니다. (예. operator[])
- 항목들에게 저장 오버헤드를 부과하지 않습니다: 항목 저장 셀의 총 비용은 항목의 물리적 크기와 같습니다.
- 메모리를 거의 할당하지 않고 하나의 메모리 버퍼만 저장합니다.
- 가장 작은 자체 크기를 갖고 있습니다: 현재는 16 바이트입니다.
랜덤 컨테이너 구현 중에서 Array는 다음 단점을 갖고 있습니다:
- 새 항목이 내부 버퍼에 맞지 않을 때 더 큰 버퍼가 할당되고 모든 항목들은 복사 생성자를 통해 새로운 버퍼에 복사되도록 재할당됩니다. 그래서 상대적으로 느릴 수 있습니다.
새 버퍼의 크기는 기존 버퍼의 2배까지 커지게 됩니다.
사용되지 않은 메모리를 해제하기 위해 배열에서 항목들을 제거할 때에도 역시 재할당이 발생할 수 있습니다.
이 문제는 버퍼의 4분의 1보다 작거나 같은 크기를 사용할 때 발생합니다.
이 경우 새로운 버퍼의 크기는 기존 버퍼의 절반입니다. (필요한 것보다 더 정확하게 2배 더 큼)
- 삽입 또는 삭제 지점 위의 모든 항목들이 항목에 대한 할당 연산자를 호출할 때 위, 또는 아래로 이동하기 때문에 삽입 및 삭제가 상대적으로 느릴 수 있습니다.
- 메모리 활용도가 낮을 수 있습니다.
만약 긴 시퀀스 삽입을 고려한다면, 내부 버퍼의 평균 채우기 요소는 75%가 될 것이며, 가장 낮은 채우기 요소는 50%가 될 것입니다.
만약 긴 시퀀스 제거를 고려한다면, 내부 버퍼의 평균 채우기 요소는 37.5%가 될 것이며, 가장 낮은 채우기 요소는 25%가 될 것입니다.
- 재할당 특성으로 인해, 항목들에 대한 참조들은 배열에서 다음 변경 동작이 호출될 때까지만 저장할 수 있습니다.
(항목들의 위치 역시 삽입, 제거 시에 변경될 수 있음을 참고하십시오)
항목들은 기본 생성자와 복사 생성자, 할당 연산자를 가져야 합니다.
이외에도 비교 연산자(==와 !=)를 갖고 있다면, 값 종속적인 연산(예. Find, Count, Contains 등) 역시 사용할 수 있게 됩니다.
다음 그림은 Array의 내부 레이아웃을 보여줍니다:

요구사항
네임스페이스: GS
헤더: Array.hpp
참고사항
PagedArray | StableArray
| ArrayFB< Type, BufferCapacity >