Nestes, num primeiro momento utilizei a criação de uma outra pilha temporária e a recolocação de cada elemento de um pilha para outra, ida e volta. Onde na volta está sendo feito as interações necessárias, como o seguinte no método render()
:
template<typename T, int S>
void Pilha<T,S>::render() {
Pilha<T,S> p_temp; // Cria uma pilha temporária
T t_temp; // Cria um objeto da pilha temporário
while (!this->isEmpty()) { // Intera na pilha original até que a esvazie
this->pop(t_temp);
p_temp.push(t_temp);
}
while (!p_temp.isEmpty()) { // Intera na pilha temporário até que a esvazie
p_temp.pop(t_temp);
t_temp.render(); // Realiza as operações necessárias
this->push(t_temp);
}
}
Para tal solução, pode-se usar o simples conceito de vetor na pilha. Preferencialmente usando métodos, privados talvez para não fugir do conceito de pilha, porém reaproveitáveis.