TArray

박정훈·2025년 3월 21일

cpp

목록 보기
5/5

생성자, 소멸자 및 할당

기본 생성자
빈 배열을 만듭니다.

TArray<int32> Array1;

초기화 리스트 생성자
선언과 동시에 요소들을 초기화합니다.

TArray<int32> Array2 = { 1, 2, 3, 4, 5 };

복사 생성자
기존 배열을 복사하여 새 배열을 만듭니다.

TArray<int32> Array3(Array2);  // Array3는 {1, 2, 3, 4, 5}를 가짐

소멸자/할당 연산자
사용 후 TArray가 자동으로 메모리를 해제합니다.
특별한 사용 예는 없으므로, C++의 일반적인 객체처럼 사용하면 됩니다.

요소 접근 (Element Access)

operator[]
인덱스를 통해 특정 요소에 접근합니다.

int32 SecondValue = Array2[1];  // 2번 인덱스, 값은 2 (0부터 시작)

Last()
마지막 요소를 반환합니다.

int32 LastValue = Array2.Last();  // 값은 5

GetData()
내부 데이터의 포인터를 얻어, C 스타일 배열처럼 사용할 수 있습니다.

int32* RawData = Array2.GetData();
// RawData[0]는 1, RawData[1]은 2 등으로 접근 가능

크기와 용량 (Capacity)

Num()
배열에 담긴 요소의 개수를 반환합니다.

int32 Count = Array2.Num();  // Count는 5

SetNum()
배열의 크기를 변경합니다. 늘어나는 경우 새 요소들은 기본값(예: int32는 0)으로 초기화됩니다.

Array2.SetNum(7);  
// 기존 {1,2,3,4,5}에서 2개의 요소가 추가되어, {1,2,3,4,5,0,0}이 됨

SetNumZeroed()
배열의 크기를 변경하면서 새로 추가된 요소를 0으로 초기화합니다.

Array2.SetNumZeroed(10);
// 모든 새 요소가 0으로 초기화됨

Reserve()
배열의 용량을 미리 할당하여, 추가 시 재할당 비용을 줄입니다.

Array2.Reserve(50);  // 최대 50개 요소를 저장할 메모리 공간을 확보

Empty()
배열의 모든 요소를 제거합니다. 옵션으로 남길 여유(Slack)를 지정할 수 있습니다.

Array2.Empty();  // 배열이 비워짐, Num()은 0이 됨

Reset()
배열을 초기 상태로 재설정하며, 내부 메모리도 해제합니다.

Array2.Reset();  // Empty()와 유사하지만 내부 할당된 메모리도 초기화

수정 및 조작 (Modifiers)

요소 추가 (Add, Emplace, Insert)

Add()
배열의 끝에 요소를 추가하고, 추가된 요소의 인덱스를 반환합니다.

int32 Index = Array1.Add(10);  // Array1에 10 추가, Index는 0

AddZeroed()
지정한 개수만큼 0(또는 기본값)으로 초기화된 요소를 추가합니다.

Array1.AddZeroed(3);  // 예: Array1에 3개의 0이 추가됨

AddUninitialized()
지정한 개수만큼 초기화되지 않은 공간을 추가합니다. 기본 생성자가 없는 타입에는 주의해야 합니다.

Array1.AddUninitialized(2);  // 메모리 공간만 확보 (값은 쓰레기일 수 있음)

Emplace()
요소를 배열의 끝에 직접 생성합니다. 생성자 인자를 바로 전달할 수 있습니다.

Array1.Emplace(20);  // Array1에 20을 직접 생성하여 추가

Insert()
지정한 인덱스 위치에 요소를 삽입합니다.

Array1.Insert(15, 1);  // 인덱스 1 위치에 15 삽입, 기존 요소들은 뒤로 밀림

요소 제거 (Remove, RemoveAt, RemoveAtSwap, RemoveSingle, RemoveAll)

Remove()
주어진 값과 일치하는 모든 요소를 제거하고, 제거된 개수를 반환합니다.

int32 RemovedCount = Array1.Remove(10);  // 값 10과 일치하는 모든 요소 제거

RemoveAt()
지정한 인덱스부터 Count개의 요소를 제거합니다.

Array1.RemoveAt(0, 1);  // 인덱스 0의 요소 1개 제거

RemoveAtSwap()
제거할 인덱스의 요소를 배열의 마지막 요소와 교환 후 제거합니다. 속도는 빠르지만 요소 순서가 바뀝니다.

Array1.RemoveAtSwap(1);  // 인덱스 1의 요소와 마지막 요소를 교환 후 제거

RemoveSingle()
값과 일치하는 첫 번째 요소만 제거하고 true/false를 반환합니다.

bool bRemoved = Array1.RemoveSingle(15);  // 처음으로 발견된 15 제거

RemoveAll()
람다식이나 Predicate를 사용하여 조건을 만족하는 모든 요소를 제거합니다.

int32 NumRemoved = Array1.RemoveAll([](int32 Val) { return Val < 5; });
// 5보다 작은 모든 요소 제거, 제거된 개수를 반환

배열 합치기 및 교환 (Append, Swap, Exchange)

Append()
다른 배열의 모든 요소를 현재 배열의 끝에 추가합니다.

TArray<int32> OtherArray = { 100, 200 };
Array1.Append(OtherArray);  // Array1 끝에 OtherArray의 요소들을 추가

Swap()
배열 내 두 인덱스의 요소를 서로 교환합니다.

Array1.Swap(0, 1);  // 인덱스 0과 1의 요소를 서로 바꿈

Exchange()
두 TArray 전체를 서로 교환합니다.

TArray<int32> ArrayA = {1, 2, 3};
TArray<int32> ArrayB = {4, 5};
ArrayA.Exchange(ArrayB);
// ArrayA는 {4,5}, ArrayB는 {1,2,3}이 됨

정렬 및 검색 (Sorting & Searching)

Sort()
사용자 정의 비교 함수를 통해 배열을 정렬합니다.

Array1.Sort([](const int32 A, const int32 B) {
    return A < B;
});

StableSort()
안정적인 정렬을 수행합니다(정렬 과정에서 같은 값의 상대적 순서를 유지).
사용법은 Sort와 유사합니다.

Array1.StableSort([](const int32 A, const int32 B) {
    return A < B;
});

BinarySearch()
정렬된 배열에서 이진 검색을 수행합니다.

int32 FoundIndex;
bool bFound = Array1.BinarySearch(20, FoundIndex);
if (bFound)
{
    // FoundIndex에 20의 인덱스가 저장됨
}

Find()
주어진 값과 일치하는 첫 번째 요소의 인덱스를 반환합니다. 없으면 INDEX_NONE을 반환합니다.

int32 Index = Array1.Find(20);
if(Index != INDEX_NONE)
{
    // 20을 찾음
}

FindLast()
주어진 값과 일치하는 마지막 요소의 인덱스를 반환합니다.

int32 LastIndex = Array1.FindLast(20);

Contains()
배열에 해당 값이 존재하는지 여부를 확인합니다.

bool bContains = Array1.Contains(20);

FindByPredicate()
Predicate(조건 함수)를 사용해 조건을 만족하는 요소를 찾고, 포인터를 반환합니다.

int32* FoundElement = Array1.FindByPredicate([](const int32& Val) {
    return Val == 20;
});
if(FoundElement)
{
    // FoundElement를 사용
}

반복자 (Iterators)

TArray는 STL 스타일의 반복자를 제공합니다.
예를 들어, 범위 기반 for 루프를 사용할 수 있습니다.

범위 기반 for 루프

for (int32 Element : Array1)
{
    // 각 Element에 접근하여 처리
}

일반 반복자 사용

for (auto It = Array1.begin(); It != Array1.end(); ++It)
{
    int32 Element = *It;
    // Element 처리
}

연산자 및 기타 기능

비교 연산자 (operator==, operator!=)
두 TArray의 요소들이 같은지 비교할 수 있습니다.

if (Array1 == Array2)
{
    // 두 배열이 같은 요소들을 가짐
}

덧셈 연산자 (operator+)
(필요에 따라 정의되어 있다면) 두 배열을 합칠 수 있습니다.
예시:

TArray<int32> Combined = Array1 + Array2;
//※ 덧셈 연산자는 엔진 버전에 따라 제공되지 않을 수도 있으니, 필요 시 Append()를 사용하는 편이 안전합니다.

0개의 댓글