템플릿 (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 << " ";
}
'UE5 부트캠프(TIL)' 카테고리의 다른 글
[TIL] Unreal C++ - 이동, 거리, 이벤트 시스템 (0) | 2025.06.18 |
---|---|
[TIL] 도서관 기능 구현 (5) | 2025.06.13 |
[TIL] 상속 익숙해지기 (1) (1) | 2025.06.09 |
[TIL] C++ class OOP(객체지향 프로그래밍) (1) | 2025.06.05 |
[TIL] C++ 간단한 프로그래밍 구현 (0) | 2025.06.04 |