UE5 부트캠프(TIL)

[TIL] 템플릿과 STL 개념 정리 및 Vector Lib 구현해보기

Yellow Kirin 2025. 6. 11. 22:32

템플릿 (Template)

템플릿은 자료형에 관계없이 동작하는 일반화된 함수나 클래스를 작성할 수 있도록 해주는 기능이다.

용도:

  • 버전을 다른 타입에 따라 복잡한 컨설 필요 없이 하나의 컨설로 차례 사용

장점:

  • 타입 사용 자유로워지는 코드
  • 자료형에 의외된 도메인 함수/클래스에서 복장 사용 없음
  • 예제 (직접 구현한 라이브러리 vector의 함수 일부):
#include <iostream>
//#include <vector>
using namespace std;

template <typename T>
class  SimpleVector {

private:
    T* data;
    int size;
    int capacity;

public:
    SimpleVector(T s = 10){
    
        size = 0;
        capacity = s;
        data = new T[capacity]();

    }
    ~SimpleVector() {

        delete[] data;
    }
   
    // 배열 값 출력
    void print() {
        for (int i = 0; i < size; i++) {
            cout << data[i] << " ";
        }
        cout << endl;
    }
    //동적 배열 크기 키우는 함수
    void resize(int newcapacity) {

        if (newcapacity <= size) {
            return;
        }
        //새로운 배열 선언
        T* newData = new T[newcapacity];
        if (data) {

            for (int i = 0; i < size; ++i) {

                //새로운 배열에 기존 배열 인자 저장
                newData [i] = data[i];

            }
            //기존 배열 동적메모리 해제
            delete[] data;

        }
        
        data = newData;
        capacity = newcapacity;

    }
// 배열 맨뒤에 value 꽃아놓기
    void push_back(const T& value ) {
        if (size == capacity) {
            // 용량이 부족하면 용량 늘리기
            if (capacity == 0) {
                resize(1); 
            }
            else {
                //메인에서 가져온 값에서 5만큼 증가시켜서 resize 함수실행
                resize(capacity + 5);
            }
        }
        //호출 될때마다 Size 1 증가
        data[size++] = value;
    }

    //
    void pop_back() {
        if (size > 0) {
            size--;
            data[size] = T();  // 기본값으로 재설정 (지워주는 느낌)
        }
        else {
            cout << "배열을 더이상 줄일 수 없습니다." << endl;
        }

    }
    // 배열 크기 반환
    int getSize() {
        return size;
    }
    int getCapacity() {
        return capacity;
    }

   

};
int main()
{
    SimpleVector<int> vec1;

    cout << "[1] push_back으로 값 추가" << endl;
    for (int i = 1; i <= 12; ++i) {
        vec1.push_back(i * 10);
    }
    vec1.print();
    cout << "현재 크기: " << vec1.getSize() << ", 용량: " << vec1.getCapacity() << endl;

    cout << "\n[2] pop_back 3번 호출" << endl;
    vec1.pop_back();
    vec1.pop_back();
    vec1.pop_back();
    vec1.print();
    cout << "현재 크기: " << vec1.getSize() << ", 용량: " << vec1.getCapacity() << endl;

    cout << "\n[3] 수동 resize(30) 호출" << endl;
    vec1.resize(30);
    cout << "현재 크기: " << vec1.getSize() << ", 용량: " << vec1.getCapacity() << endl;
    

    return 0;

    
}

 

 

  • 출력 결과

STL (Standard Template Library)

STL은 시스템에서 가장 통적적인 테크니어 프로그램 키크에 기반하여 개발된 모든 함수가 템플릿으로 구현된 프로그램 라이브러리.

구성 요소:

  • 컨테이너: vector, list, deque, set, map, stack, queue
  • 알고리즘: sort, find, count, reverse, accumulate
  • 반복자 (Iterator): begin(), end(), ++it, *it 등

예제 (vector):

#include <vector>
#include <iostream>
using namespace std;

vector<int> v;
v.push_back(10);
v.push_back(20);
for (int i : v) {
    cout << i << " ";
}