CAtlArray 클래스
이 클래스는 배열 개체를 구현합니다.
구문
template<typename E, class ETraits = CElementTraits<E>>
class CAtlArray
매개 변수
E
배열에 저장할 데이터의 형식입니다.
ETraits
요소를 복사하거나 이동하는 데 사용되는 코드입니다.
멤버
메서드
함수 | 설명 |
---|---|
추가 | 배열 개체에 요소를 추가하려면 이 메서드를 호출합니다. |
Append | 이 메서드를 호출하여 한 배열의 내용을 다른 배열의 끝에 추가합니다. |
AssertValid | 배열 개체가 유효한지 확인하려면 이 메서드를 호출합니다. |
CAtlArray | 생성자입니다. |
~CAtlArray | 소멸자입니다. |
복사 | 한 배열의 요소를 다른 배열에 복사하려면 이 메서드를 호출합니다. |
FreeExtra | 배열에서 빈 요소를 제거하려면 이 메서드를 호출합니다. |
GetAt | 배열 개체에서 단일 요소를 검색하려면 이 메서드를 호출합니다. |
GetCount | 배열에 저장된 요소 수를 반환하려면 이 메서드를 호출합니다. |
GetData | 배열의 첫 번째 요소에 대한 포인터를 반환하려면 이 메서드를 호출합니다. |
InsertArrayAt | 한 배열을 다른 배열에 삽입하려면 이 메서드를 호출합니다. |
InsertAt | 배열 개체에 새 요소(또는 요소의 여러 복사본)를 삽입하려면 이 메서드를 호출합니다. |
IsEmpty | 배열이 비어 있는지 테스트하려면 이 메서드를 호출합니다. |
RemoveAll | 배열 개체에서 모든 요소를 제거하려면 이 메서드를 호출합니다. |
RemoveAt | 배열에서 하나 이상의 요소를 제거하려면 이 메서드를 호출합니다. |
SetAt | 배열 개체의 요소 값을 설정하려면 이 메서드를 호출합니다. |
SetAtGrow | 이 메서드를 호출하여 배열 개체의 요소 값을 설정하고 필요에 따라 배열을 확장합니다. |
SetCount | 배열 개체의 크기를 설정하려면 이 메서드를 호출합니다. |
연산자
연산자 | 설명 |
---|---|
operator [] |
배열의 요소에 대한 참조를 반환하려면 이 연산자를 호출합니다. |
Typedef
Typedef | 설명 |
---|---|
INARGTYPE | 배열에 요소를 추가하는 데 사용할 데이터 형식입니다. |
OUTARGTYPE | 배열에서 요소를 검색하는 데 사용할 데이터 형식입니다. |
설명
CAtlArray
에서는 사용자 정의 형식의 요소 배열을 만들고 관리하는 메서드를 제공합니다. 표준 C 배열과 유사하지만 개체는 CAtlArray
필요에 따라 동적으로 축소 및 증가할 수 있습니다. 배열 인덱스는 항상 위치 0에서 시작하며 상한을 고정하거나 새 요소가 추가될 때 확장할 수 있습니다.
요소가 적은 배열의 경우 ATL 클래스 CSimpleArray 를 사용할 수 있습니다.
CAtlArray
는 MFC의 CArray
클래스와 밀접한 관련이 있으며 직렬화 지원 없이도 MFC 프로젝트에서 작동합니다.
자세한 내용은 ATL 컬렉션 클래스를 참조 하세요.
요구 사항
헤더: atlcoll.h
CAtlArray::Add
배열 개체에 요소를 추가하려면 이 메서드를 호출합니다.
size_t Add(INARGTYPE element);
size_t Add();
매개 변수
요소
배열에 추가할 요소입니다.
Return Value
추가된 요소의 인덱스 값을 반환합니다.
설명
새 요소가 배열의 끝에 추가됩니다. 요소가 제공되지 않으면 빈 요소가 추가됩니다. 즉, 실제 요소가 추가된 것처럼 배열의 크기가 증가합니다. 작업이 실패 하면 인수 E_OUTOFMEMORY AtlThrow 가 호출됩니다.
예시
// Declare an array of integers
CAtlArray<int> iArray;
iArray.Add(1); // element 0
iArray.Add(2); // element 1
iArray.Add(); // element 2
ATLASSERT(iArray.GetCount() == 3);
CAtlArray::Append
이 메서드를 호출하여 한 배열의 내용을 다른 배열의 끝에 추가합니다.
size_t Append(const CAtlArray<E, ETraits>& aSrc);
매개 변수
aSrc
추가할 배열입니다.
Return Value
추가된 첫 번째 요소의 인덱스 값을 반환합니다.
설명
제공된 배열의 요소는 기존 배열의 끝에 추가됩니다. 필요한 경우 새 요소를 수용하기 위해 메모리가 할당됩니다.
배열은 동일한 형식이어야 하며 배열을 자체에 추가할 수 없습니다.
디버그 빌드에서 인수가 유효한 배열이 아니거나 aSrc가 동일한 개체를 참조하는 경우 ATLASSERT가 발생 CAtlArray
합니다. 릴리스 빌드에서 잘못된 인수로 인해 예측할 수 없는 동작이 발생할 수 있습니다.
예시
// Declare two integer arrays
CAtlArray<int> iArray1,iArray2;
iArray1.Add(1); // element 0
iArray1.Add(2); // element 1
iArray2.Add(3); // element 0
iArray2.Add(4); // element 1
// Append iArray2 to iArray1
iArray1.Append(iArray2);
ATLASSERT(iArray1.GetCount() == 4);
CAtlArray::AssertValid
배열 개체가 유효한지 확인하려면 이 메서드를 호출합니다.
void AssertValid() const;
설명
배열 개체가 유효하지 않으면 ATLASSERT에서 어설션을 throw합니다. 이 메서드는 _DEBUG 정의된 경우에만 사용할 수 있습니다.
예시
CAtlArray<float> fArray;
// AssertValid only exists in debug builds
#ifdef _DEBUG
fArray.AssertValid();
#endif
CAtlArray::CAtlArray
생성자입니다.
CAtlArray() throw();
설명
배열 개체를 초기화합니다.
예시
CAtlArray<int> iArray;
CAtlArray::~CAtlArray
소멸자입니다.
~CAtlArray() throw();
설명
배열 개체에서 사용하는 모든 리소스를 해제합니다.
CAtlArray::Copy
한 배열의 요소를 다른 배열에 복사하려면 이 메서드를 호출합니다.
void Copy(const CAtlArray<E, ETraits>& aSrc);
매개 변수
aSrc
배열에 복사할 요소의 소스입니다.
설명
한 배열의 요소를 다른 배열의 요소로 덮어쓰려면 이 메서드를 호출합니다. 필요한 경우 새 요소를 수용하기 위해 메모리가 할당됩니다. 배열의 요소를 자체에 복사할 수 없습니다.
배열의 기존 콘텐츠를 보존하려면 CAtlArray::Append를 대신 사용합니다.
디버그 빌드에서 기존 개체가 유효하지 않거나 aSrc가 동일한 개체를 CAtlArray
참조하는 경우 ATLASSERT가 발생합니다. 릴리스 빌드에서 잘못된 인수로 인해 예측할 수 없는 동작이 발생할 수 있습니다.
참고 항목
CAtlArray::Copy
는 CAutoPtr 클래스로 만든 요소로 구성된 배열을 지원하지 않습니다.
예시
CAtlArray<int> iArrayS, iArrayT;
iArrayS.Add(1);
iArrayS.Add(2);
iArrayT.Add(3);
iArrayT.Add(4);
iArrayT.Copy(iArrayS);
ATLASSERT(iArrayT.GetCount() == 2);
ATLASSERT(iArrayT[0] == 1);
ATLASSERT(iArrayT[1] == 2);
CAtlArray::FreeExtra
배열에서 빈 요소를 제거하려면 이 메서드를 호출합니다.
void FreeExtra() throw();
설명
빈 요소는 모두 제거되지만 배열의 크기와 상한은 변경되지 않습니다.
디버그 빌드에서 CAtlArray 개체가 유효하지 않거나 배열이 최대 크기를 초과하는 경우 ATLASSERT가 발생합니다.
CAtlArray::GetAt
배열 개체에서 단일 요소를 검색하려면 이 메서드를 호출합니다.
const E& GetAt(size_t iElement) const throw();
E& GetAt(size_t iElement) throw();
매개 변수
iElement
반환할 배열 요소의 인덱스 값입니다.
Return Value
필요한 배열 요소에 대한 참조를 반환합니다.
설명
디버그 빌드에서 iElement가 배열의 요소 수를 초과하면 ATLASSERT가 발생합니다. 릴리스 빌드에서 잘못된 인수로 인해 예측할 수 없는 동작이 발생할 수 있습니다.
예시
// Declare an array of integers
CAtlArray<int> iMyArray;
int element;
// Add ten elements to the array
for (int i = 0; i < 10; i++)
{
iMyArray.Add(i);
}
// Use GetAt and SetAt to modify
// every element in the array
for (size_t i = 0; i < iMyArray.GetCount(); i++)
{
element = iMyArray.GetAt(i);
element *= 10;
iMyArray.SetAt(i, element);
}
CAtlArray::GetCount
배열에 저장된 요소 수를 반환하려면 이 메서드를 호출합니다.
size_t GetCount() const throw();
Return Value
배열에 저장된 요소 수를 반환합니다.
설명
배열의 첫 번째 요소가 위치 0에 있으므로 반환되는 GetCount
값은 항상 가장 큰 인덱스보다 1 더 큽합니다.
예시
CAtlArray::GetAt에 대한 예제를 참조하세요.
CAtlArray::GetData
배열의 첫 번째 요소에 대한 포인터를 반환하려면 이 메서드를 호출합니다.
E* GetData() throw();
const E* GetData() const throw();
Return Value
배열의 첫 번째 요소를 저장하는 메모리 위치에 대한 포인터를 반환합니다. 사용할 수 있는 요소가 없으면 NULL이 반환됩니다.
예시
// Define an array of integers
CAtlArray<int> MyArray;
// Define a pointer
int* pData;
// Allocate enough space for 32 elements
// with buffer increase to be calculated
// automatically
MyArray.SetCount(32, -1);
// Set the pointer to the first element
pData = MyArray.GetData();
// Set array values directly
for (int j = 0; j < 32; j++, pData++)
{
*pData = j * 10;
}
CAtlArray::INARGTYPE
배열에 요소를 추가하는 데 사용할 데이터 형식입니다.
typedef ETraits::INARGTYPE INARGTYPE;
CAtlArray::InsertArrayAt
한 배열을 다른 배열에 삽입하려면 이 메서드를 호출합니다.
void InsertArrayAt(size_t iStart, const CAtlArray<E, ETraits>* paNew);
매개 변수
iStart
배열을 삽입할 인덱스입니다.
paNew
삽입할 배열입니다.
설명
배열 paNew의 요소는 요소 iStart에서 시작하여 배열 개체로 복사됩니다. 기존 배열 요소는 덮어쓰지 않도록 이동됩니다.
디버그 빌드에서 개체가 유효하지 않거나 paNew 포인터가 NULL이거나 잘못된 경우 ATLASSERT가 발생 CAtlArray
합니다.
참고 항목
CAtlArray::InsertArrayAt
는 CAutoPtr 클래스로 만든 요소로 구성된 배열을 지원하지 않습니다.
예시
// Define two integer arrays
CAtlArray<int> iTargetArray, iSourceArray;
// Add elements to first array
for (int x = 0; x < 10; x++)
{
iTargetArray.Add(x);
}
// Add elements to the second array
for (int x = 0; x < 10; x++)
{
iSourceArray.Add(x * 10);
}
// Insert the Source array into the Target
// array, starting at the 5th element.
iTargetArray.InsertArrayAt(5, &iSourceArray);
CAtlArray::InsertAt
배열 개체에 새 요소(또는 요소의 여러 복사본)를 삽입하려면 이 메서드를 호출합니다.
void InsertAt(size_t iElement, INARGTYPE element, size_t nCount = 1);
매개 변수
iElement
요소 또는 요소를 삽입할 인덱스입니다.
요소
삽입할 요소 또는 요소의 값입니다.
nCount
추가할 요소의 수입니다.
설명
인덱 스 iElement부터 배열에 하나 이상의 요소를 삽입합니다. 기존 요소는 덮어쓰지 않도록 이동됩니다.
디버그 빌드에서 개체가 유효하지 않거나, 추가할 요소 수가 0이거나, 결합된 요소 수가 너무 커서 배열이 포함할 수 없는 경우 CAtlArray
ATLASSERT가 발생합니다. 소매 빌드에서 잘못된 매개 변수를 전달하면 예측할 수 없는 결과가 발생할 수 있습니다.
예시
// Declare an array of integers
CAtlArray<int> iBuffer;
// Add elements to the array
for (int b = 0; b < 10; b++)
{
iBuffer.Add(0);
}
// Instert ten 1's into the array
// at position 5
iBuffer.InsertAt(5, 1, 10);
CAtlArray::IsEmpty
배열이 비어 있는지 테스트하려면 이 메서드를 호출합니다.
bool IsEmpty() const throw();
Return Value
배열이 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
설명
요소가 없으면 배열이 비어 있다고 합니다. 따라서 배열에 빈 요소가 포함되어 있더라도 비어 있지 않습니다.
예시
// Define an array of chars
CAtlArray<char> cArray;
// Add an element
cArray.Add('a');
// Confirm array is not empty
ATLASSERT(!cArray.IsEmpty());
// Remove all elements
cArray.RemoveAll();
// Confirm array is empty
ATLASSERT(cArray.IsEmpty());
CAtlArray::operator []
배열의 요소에 대한 참조를 반환하려면 이 연산자를 호출합니다.
E& operator[](size_t ielement) throw();
const E& operator[](size_t ielement) const throw();
매개 변수
iElement
반환할 배열 요소의 인덱스 값입니다.
Return Value
필요한 배열 요소에 대한 참조를 반환합니다.
설명
CAtlArray::GetAt과 유사한 함수 를 수행합니다. MFC 클래스 CArray와 달리 이 연산자는 CAtlArray::SetAt 대신 사용할 수 없습니다.
디버그 빌드에서 iElement가 배열의 총 요소 수를 초과하면 ATLASSERT가 발생합니다. 소매 빌드에서 잘못된 매개 변수로 인해 예측할 수 없는 결과가 발생할 수 있습니다.
CAtlArray::OUTARGTYPE
배열에서 요소를 검색하는 데 사용할 데이터 형식입니다.
typedef ETraits::OUTARGTYPE OUTARGTYPE;
CAtlArray::RemoveAll
배열 개체에서 모든 요소를 제거하려면 이 메서드를 호출합니다.
void RemoveAll() throw();
설명
배열 개체에서 모든 요소를 제거합니다.
이 메서드는 CAtlArray::SetCount를 호출하여 배열 크기를 조정한 다음 할당된 메모리를 해제합니다.
예시
CAtlArray::IsEmpty에 대한 예제를 참조하세요.
CAtlArray::RemoveAt
배열에서 하나 이상의 요소를 제거하려면 이 메서드를 호출합니다.
void RemoveAt(size_t iElement, size_t nCount = 1);
매개 변수
iElement
제거할 첫 번째 요소의 인덱스입니다.
nCount
제거할 요소의 수입니다.
설명
배열에서 하나 이상의 요소를 제거합니다. 나머지 요소는 아래로 이동합니다. 상한값은 감소하지만 CAtlArray::FreeExtra를 호출할 때까지 메모리가 해제되지 않습니다.
디버그 빌드에서 개체가 유효하지 않거나 결합된 CAtlArray
iElement 및 nCount 합계가 배열의 총 요소 수를 초과하는 경우 ATLASSERT가 발생합니다. 소매 빌드에서 잘못된 매개 변수로 인해 예측할 수 없는 결과가 발생할 수 있습니다.
예시
// Declare an array of chars
CAtlArray<char> cMyArray;
// Add ten elements to the array
for (int a = 0; a < 10; a++)
{
cMyArray.Add('*');
}
// Remove five elements starting with
// the element at position 1
cMyArray.RemoveAt(1, 5);
// Free memory
cMyArray.FreeExtra();
// Confirm size of array
ATLASSERT(cMyArray.GetCount() == 5);
CAtlArray::SetAt
배열 개체의 요소 값을 설정하려면 이 메서드를 호출합니다.
void SetAt(size_t iElement, INARGTYPE element);
매개 변수
iElement
설정할 배열 요소를 가리키는 인덱스입니다.
요소
지정된 요소의 새 값입니다.
설명
디버그 빌드에서 iElement가 배열의 요소 수를 초과하면 ATLASSERT가 발생합니다. 소매 빌드에서 잘못된 매개 변수로 인해 예측할 수 없는 결과가 발생할 수 있습니다.
예시
CAtlArray::GetAt에 대한 예제를 참조하세요.
CAtlArray::SetCount
배열 개체의 크기를 설정하려면 이 메서드를 호출합니다.
bool SetCount(size_t nNewSize, int nGrowBy = - 1);
매개 변수
nNewSize
배열의 필수 크기입니다.
nGrowBy
버퍼를 만드는 데 사용되는 값입니다. 값이 -1이면 내부적으로 계산된 값이 사용됩니다.
Return Value
배열의 크기가 성공적으로 조정되면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
설명
배열의 크기를 늘리거나 줄일 수 있습니다. 증가하면 추가 빈 요소가 배열에 추가됩니다. 감소하면 인덱스가 가장 큰 요소가 삭제되고 메모리가 해제됩니다.
이 메서드를 사용하여 배열을 사용하기 전에 배열의 크기를 설정합니다. 사용하지 않으면 SetCount
요소를 추가하는 프로세스와 수행된 후속 메모리 할당이 성능 및 조각 메모리를 감소시킵니다.
예시
CAtlArray::GetData에 대한 예제를 참조하세요.
CAtlArray::SetAtGrow
이 메서드를 호출하여 배열 개체의 요소 값을 설정하고 필요에 따라 배열을 확장합니다.
void SetAtGrow(size_t iElement, INARGTYPE element);
매개 변수
iElement
설정할 배열 요소를 가리키는 인덱스입니다.
요소
지정된 요소의 새 값입니다.
설명
인덱스가 가리키는 요소의 값을 바꿉니다. iElement가 배열의 현재 크기보다 크면 CAtlArray::SetCount 호출을 사용하여 배열이 자동으로 증가합니다. 디버그 빌드에서 개체가 유효하지 않으면 ATLASSERT가 CAtlArray
발생합니다. 소매 빌드에서 잘못된 매개 변수로 인해 예측할 수 없는 결과가 발생할 수 있습니다.
예시
// Declare an array of integers
CAtlArray<int> iGrowArray;
// Add an element
iGrowArray.Add(0);
// Add an extra element at position 19.
// This will grow the array to accommodate.
iGrowArray.SetAtGrow(19, 0);
// Confirm size of new array
ATLASSERT(iGrowArray.GetCount() == 20);
// Note: the values at position 1 to 18
// are undefined.
참고 항목
MMXSwarm 샘플
DynamicConsumer 샘플
UpdatePV 샘플
선택 윤곽 샘플
CArray 클래스
클래스 개요