[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;
	}
};

 


결과

 

세 문제를 한 프로그램에 풀었습니다.

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