문제1
다음은 배열의 원소를 복사하는 함수 템플릿 Copy( )의 호출 코드입니다. 함수 템플릿 Copy( )를 작성하세요.
//1번 int arr1[5] = { 10, 20, 30, 40, 50 }; int arr2[5]; //Copy(t, s, n) t:목적지 주소, s:소스 주소, n:원소 개수 Copy(arr2, arr1, 5);
문제1 풀이코드
//1번문제 Copy 템플릿 함수 template<typename T> void Copy(T* t, T* s, int n) { for (int i = 0; i < n; i++) { t[i] = s[i]; } }
문제2
다음은 Push( ), Pop( ), Empty( ) 인터페이스를 갖는 Stack 객체의 사용 코드입니다. 최소한의 Stack 클래스를 작성하세요.
//2번 Stack<int> st; st.Push(10); st.Push(20); st.Push(30); if (!st.Empty()) { cout << st.Pop() << endl; } if (!st.Empty()) { cout << st.Pop() << endl; } if (!st.Empty()) { cout << st.Pop() << endl; }
문제2 풀이코드
//2번 Stack함수 template<typename T=int, int capT=1> class Stack { T* data; int capacity; int size; public: explicit Stack(int capacity = capT) : data(0), size(0), capacity(capT) { data = new T[capacity]; //기본 1 할당 } ~Stack() { delete[] data; // 소멸자에서 메모리 해제 } void Push(const T& t) { if (size >= capacity) { int newCapacity = (capacity == 0) ? 1 : capacity * 2; T* newData = new T[newCapacity]; for (int i = 0; i < size; i++) { newData[i] = data[i]; } delete[] data; data = newData; capacity = newCapacity; } data[size++] = t; } T& Pop() { if (size == 0) { throw runtime_error("Stack is empty!"); } return data[--size]; // 크기를 줄인 후 해당 데이터를 반환 } bool Empty() { return size <= 0; } };
문제3
다음은 Push( ), Pop( ), Empty( ) 인터페이스를 갖는 Queue 객체의 사용 코드입니다. 최소한의 Queue 클래스를 작성하세요.
//3번 Queue<int> q; q.Push(10); q.Push(20); q.Push(30); if (!q.Empty()) { cout << q.Pop() << endl; } if (!q.Empty()) { cout << q.Pop() << endl; } if (!q.Empty()) { cout << q.Pop() << endl; }
문제3 풀이코드
//3번 template<typename T = int, int capT = 1> class Queue { T* data; int size; int capacity; public: explicit Queue(int capacity = capT) : data(0), size(0), capacity(capT) { data = new T[capacity]; } void Push(const T& num) { if (size >= capacity) { int newCapacity = capacity * 2; T* newData = new T[newCapacity]; for (int i = 0; i < size; i++) { newData[i] = data[i]; } delete[] data; data = newData; capacity = newCapacity; } data[size++] = num; } T Pop() { if (size == 0) { throw runtime_error("Queue is empty!"); } T result = data[0]; // 첫 번째 값 저장 for (int i = 0; i < size - 1; i++) { data[i] = data[i + 1]; // 앞당기기 } size--; // 크기 줄이기 return result; } bool Empty() { return size <= 0; } };
결과

세 문제를 한 프로그램에 풀었습니다.
1번은 Copy 되는 것을 확인했습니다.
2번: 위 결과
3번: 아래 결과
입니다.
'C++ > STL' 카테고리의 다른 글
[STL] 컨테이너 ( container ) (0) | 2025.03.01 |
---|---|
[STL] STL 시작 (1) | 2025.03.01 |
[STL] 함수 템플릿 (0) | 2025.02.21 |
[STL] 함수 객체 (0) | 2025.02.20 |
[STL] 함수 포인터 - 콜백 함수 (0) | 2025.02.15 |