Definition :
A predefined class or form that is applied to each new class or form you create.
Template is a “Generic Term “ . Template declaration specifies a set of parameterized classes or functions.
Main usage for Templates :
1) Receive at run time any type of argument ( string , int ,float , ..etc.,) in a
single prototype declaration.
2) Reduce the size ofs Code
3) Lots of Built in code like Predefined operations (Standard Template Library) (List ,map, set , ..etc )
4) Support OOPS Concept
5) Memory Management.
Templates specifies :
Class Template and Function Template.
Class Template :
Class templates define a family of related classes that are based on the parameters passed to the class upon instantiation
Syntax :
template < typelist > Class Declaration
Example :
#include <iostream>
#include <string>
using namespace std;
ostream &newline(ostream&nel){
return nel<<endl<<endl;
}
template < class T>
class James
{
T Number;
James *Next;
public:
void Create(James<T> *);
void Display(James<T> *);
int Print(T);
};
template <class T> void James<T>::Create(James<T> *p)
{
//p=new James<T>;
cout<<"Enter the Number "<<newline;
cin>>p->Number;
cout<<"Enter "<<newline;
cin>>p->Next->Number;
}
template< class T> void James<T>::Display(James<T> *p)
{
cout<<"Answers : "<<newline<<p->Number<<newline<<p->Next->Number<<endl;
}
template<class T> int James<T>::Print(T Integer)
{
cout<<Integer <<newline;
return 1;
}
void main()
{
James<int> *m=new James<int>;
James<float> *m1=new James<float>;
James<string> *m2=new James<string>;
m2->Create(m2);
m2->Display(m2);
delete m2;
}
In the above program explain the clear idea about “ class templates “
Function Template :
Function templates are similar to class templates, but define a family of functions .
Syntax :
template < typelist > Function Declaration
Example :
#include <iostream>
#include <string>
using namespace std;
template<class T> void f()
{
cout<<"I Won with the Help of C++"<<endl;
}
void main()
{
void g();
g();
}
void g()
{
f<int>();
}
Standard Template Library ( STL ) :
STL is a general purpose library consist of algorithm and data structure.
It consists of
- Containers
- Generic Algorithm
- Iterators
- Function Objects
- Allocators
- Adaptors
Sample Program :
Display a string using Vector Template
#include <iostream>
#include <vector>
using namespace std;
class sample{
public:
void display()
{
cout<<"Display"<<endl;
}
};
void main()
{
vector<sample> a;
vector<sample>::iterator i=a.begin();
i->display();
}
Display a Name and Year using Vector Template
#include <string>
using namespace std;
class sample{
string name;
int number;
public:
sample(){}
sample(string newname,int newnumber):name(newname),number(newnumber){}
static void Display(vector<sample>*p)
{
for(vector<sample>::iterator i=p->begin();i!=p->end();i++)
{
cout<<i->name<<"\t"<<i->number<<endl;
}
}
};
void main()
{
vector<sample> *a=new vector<sample>;
cout<<endl<< "NAME "<<"\t"<<"YEAR"<<endl<<endl;;
a->insert(a->begin(),sample("India",23));
a->insert(a->begin(),sample("James",22));
a->insert(a->begin(),sample("MACMET",21));
a->insert(a->begin(),sample("Technologies",20));
sample::Display(a);
cout<<endl;
delete a;
}
Arithmetic Function Object:
Arithmetic Function objects supports standard arithmetic operations
For addition Function Object
Syntax:
plus<type >
Sample Program :
a) #include <iostream>
#include <string>
#include <functional>
using namespace std;
void main()
{
plus<int> add;
cout<<add(1,2)<<endl;
plus<string> add1;
cout<<add1("james", " prasanna ")<<endl;
}
b) #include <iostream>
#include <numeric>
#include <vector>
#include <functional>
using namespace std;
void main()
{
minus<int> red;
negate<int> neg;
cout<<red(1,2)<<endl;
cout<<neg(2)<<endl;
}
Auto ptr Class :
Auto_ptr class avoid memory Leak
Syntax:
auto_ptr<type>
Sample Program :
#include <iostream>
#include <memory>
#include <string>
using namespace std;
void main()
{
auto_ptr<string> a(new string("jshdfjhsd"));
cout<<*a<<endl;
a->insert(strlen(" "),"james");
cout<<*a<<endl;
}
Stack Template :
#include <stack>
#include <iostream>
using namespace std;
void main()
{
stack<int> a;
a.push(1);
if(!a.empty())
cout<<"Not Empty "<<endl;
else
cout<<"Empty "<<endl;
cout<<a.top()<<endl;}
Set Template :
#include <set>
#include <iostream>
using namespace std;
void truefalse(int x)
{
cout<<(x?"true":"false")<<endl;
}
void main()
{
set<int> a,b;
a.insert(1);
a.insert(2);
a.insert(3);
set<int>::iterator i;
for(i=a.begin();i!=a.end();i++)
cout<<*i<<endl;
truefalse(a.key_comp()(1,2));
i=a.find(0);
truefalse(i!=a.end());
}