Templates in C++: Programs

**************************PROGRAM 1***************************
//Stack class without template for integer stack
#include <iostream>
#include <string>
using namespace std;
class Stack
{
    private:
        int top;
        int st[100];
    public:
        Stack();
        void push(int i);
        int pop();
    };
    Stack::Stack()
    {
        top = -1;
    }
    void Stack::push(int i)
    {
        st[++top] = i;
    }
int Stack::pop()
    {
        return st[top--];
    }
    int main ()
    {
        Stack s;
        s.push(10);
        s.push(20);
        s.push(30);
        cout << s.pop() << endl;
        cout << s.pop() << endl;
        cout << s.pop() << endl;
        return 0;
    }

*********************************PROGRAM 2 *************************
//Class Template to implement Stack class
#include <iostream>
#include <string>
using namespace std;

template <class T>
class Stack
{
    private:
        int top;
        T st[100];
    public:
        Stack();
        void push(T i);
        T pop();
    };
    template <class T>
    Stack<T>::Stack()
    {
        top = -1;
    }
    template <class T>
    void Stack<T>::push(T i)
    {
        st[++top] = i;
    }
    template <class T>
    T Stack<T>::pop()
    {
        return st[top--];
    }
    int main ()
    {
        Stack<int> int_stack;
        Stack<string> str_stack;
        int_stack.push(10);
        str_stack.push("Hello");
        str_stack.push("World");
        cout << int_stack.pop() << endl;
        cout << str_stack.pop() << endl;
        cout << str_stack.pop() << endl;
        return 0;
    }

*****************************PROGRAM 3******************************
//Program to demonstrate array class using class template. 
//It creates a class with constructors and a method
#include <iostream>
#include<string.h>
using namespace std;
template<class T>
class arr
{
T *a;
int size;
public:
    arr()
        {
               
            size=0;
            a=new T[size];
            for(int i=0;i<size;i++)
            a[i]=0;
        }
       arr(int s)
        {
               
            a=new T[s];
            for(int i=0;i<s;i++)
            a[i]=-1;
        }
    arr(T *v,int len=3)
    {
        size=len;
        a=new T[len];
        for(int i=0;i<len;i++)
        a[i]=v[i];
    }
    void display()
    {
        cout<<"Array elements are:\n";
        for(int i=0;i<size;i++)
        cout<<"\t"<<a[i];
        cout<<endl;
    }
    
        
};
int main() {
    arr<int> intarr;
    int i[5]={1,2,3,4,5};
    intarr=i;
    intarr.display();
    
    float f[4]={1.1,2.2,3.3,4.4};
    arr<float> floatarr(f,4);
    floatarr.display();
    
    char *c="Hello";
    int len=strlen(c);
    arr<char> chararr(c,len);
    chararr.display();
    return 0;
}

*********************PROGRAM 4 ***************************
//Program to demonstrate class template
// with multiple type parameters
#include <iostream>
#include<string.h>
using namespace std;
template<class T1, class T2>
class Show
{
T1 x;
T2 y;
public:
    Show(T1 x, T2 y)
    {
        this->x=x;
        y=y;
        
    }
    void display()
    {
        cout<<"Values are:"<<x<<"\t"<<y;
    }
    
        
};
int main() 
{
    Show<float,int> s;
    s.display();
    return 0;
}

*****************************PROGRAM 5****************************
//Program to demonstrate function template 
//for swapping two numbers
#include <iostream>
using namespace std;
template<typename T>
void swapN(T &a,T &b)
{
    T temp;
    temp=a;
    a=b;
    b=temp;
}
int main() 
{
    int a,b;
    cout<<"\nEnter two numbers for swapping\n";
    cin>>a>>b;
    cout<<"\nNumbers before swapping: "<<a<<"\t"<<b;
    swapN(a,b);
    cout<<"\nNumbers after swapping: "<<a<<"\t"<<b;
    float f1,f2;
    cout<<"\nEnter two numbers for swapping\n";
    cin>>f1>>f2;
    cout<<"\nNumbers before swapping: "<<f1<<"\t"<<f2;
    swapN(f1,f2);
    cout<<"\nNumbers after swapping: "<<f1<<"\t"<<f2;
    return 0;
}


***************************PROGRAM 6 ***********************
//Program to demonstrate function template for swapping 
//two numbers with different data types
#include <iostream>
using namespace std;
template<typename T1, typename T2>
void display(T1 a, T2 b)
{
    
    cout<<"\nMemory used by "<<a<<" is "<<sizeof(a);
    cout<<"\nMemory used by "<<b<<" is "<<sizeof(b);
}
int main() 
{
    display(23.44,'c');
    display(34,"hello");
    display(44L,89);
    return 0;
}

/*
****************OUTPUT**************

Memory used by 23.44 is 8
Memory used by c is 1
Memory used by 34 is 4
Memory used by hello is 4
Memory used by 44 is 4
Memory used by 89 is 4

*/