1. 다음과 같은 함수를 첨가해서 스택 ADT를 확장하라: 스택을 출력하는 함수, 스택을 두 개의 스택으로 분할해서 하나는 밑으로부터 반을, 또 다른 하나는 나머지 원소를 포함하는 함수, 두 개의 함수를 하나로 합병하여 두 번째 스택에 있는 모든 원소를 첫 번째 스택의 톱에 설치하는 함수. 이 새로운 함수의 C++ 코드를 작성하라.
#include <iostream>
#include <algorithm>
using namespace std;
template <class T>
class Stack {
private:
T* stack;
int top;
int capacity;
public:
Stack(int stackCapacity = 10) : capacity(stackCapacity) {
if (capacity < 1)
throw "Stack capacity must be > 0";
stack = new T[capacity];
top = -1;
}
void ChangeSize1D(T*& a, const int oldSize, const int newSize) {
if (newSize < 0)
throw "New length must be >=0";
T* temp = new T[newSize];
int number = min(oldSize, newSize);
copy(a, a + number, temp);
delete[]a;
a = temp;
}
bool IsEmpty() const {
return top == -1;
}
T& Top() const {
if (IsEmpty())
throw "Stack is empty";
return stack[top];
}
void Push(const T& item) {
if (top == capacity - 1) {
ChangeSize1D(stack, capacity, capacity * 2);
capacity *= 2;
}
stack[++top] = item;
}
void Pop() {
if (IsEmpty())
throw "Stack is empty. Cannot delete.";
stack[top--].~T();
}
void Print() { //스택을 출력하는 함수
cout << "stack의 원소 출력" << endl;
for (int i = top; i >= 0; i--)
cout << "stack " << i << " : " << stack[i] << endl;
}
};
int main() {
Stack<int> intStack;
int i = 0;
int k;
cout << "스택에 Push할 원소의 개수 : ";
cin >> k;
cout << endl;
for (i = 0; i < k; i++) {
int n;
cout << "스택에 Push할 원소 입력 : ";
cin >> n;
intStack.Push(n);
}
cout <<endl << "현재 스택의 top : " << intStack.Top() << endl << endl;
intStack.Print();
}
//출력 결과
* 스택을 반으로 분할 하는 그 문제는 문제를 이해 못 햇음 ㅠ 생략 ~..