[STL] 4장 문제풀이

문제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;
}
};

 


결과

etc-image-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