٩٧ رﺎﻬﺑ ‐ ﻪﺘﻓﺮﺸﯿﭘ ﺴﯾﻮﻧ ﻪﻣﺎﻧﺮﺑ یﺮﻫﻮﺟ ﻦﯿﺴﺣ :ﻂﺳﻮﺗ ﺲﯾرﺪﺗ ﺳﻮﻃ ﻦﯾﺪﻟاﺮﯿﺼﻧ ﻪﺟاﻮﺧ هﺎ ﺸﻧاد ‐ ﺿﺎﯾر هﺪ ﺸﻧاد
ﻢﻫدﺰﻧﺎﭘ سرد ﻪﺻﻼﺧ
:سرد ﻦﯾا ﻢﯿﻫﺎﻔﻣ Class Template ﻮ ﻟا ترﻮﺻ ﻪﺑ سﻼﮐ
ﻮ ﻟا ﻞ ﺷ ﻪﺑ سﻼﮐ ١
.دﺮﮐ ﻒﯾﺮﻌﺗ ﺮﯿﻐﺘﻣ ترﻮﺼﺑ ناﻮﺗ ﻣ ار ﺎﻫﺮﺘﻣارﺎﭘ هداد عﻮﻧ ﻪﮐ ﻢﯾﺪﯾد .ﻢﯾﺪﺷ ﺎﻨﺷآ ﻮ ﻟا ﻊﺑاﻮﺗ ﺎﺑ ﺎﻣ مﻮﺳ سرد رد ﻠﯿﺧ یا ﻪﻧﻮﻤﻧ ﺮﯾز ﺪﮐ ﻪﻌﻄﻗ .ﺪﻨﮐ ﻣ ﻊﻓر ار ﻒﻠﺘﺨﻣ هداد عاﻮﻧا یاﺮﺑ ﻪﻧﺎﮔاﺪﺟ ﻒﯾﺮﻌﺗ ﻪﺑ زﺎﯿﻧ ،ﻮ ﻟا ﻊﺑﺎﺗ زا هدﺎﻔﺘﺳا ﺪﻧاﻮﺗ ﻣ ﺲﯾﻮﻧ ﻪﻣﺎﻧﺮﺑ .ﺖﺳا هﺪﺷ ﻒﯾﺮﻌﺗ ﻮ ﻟا ترﻮﺼﺑ print ﻊﺑﺎﺗ ﺎﺠﻨﯾا رد .ﺪﻫد ﻣ نﺎﺸﻧ ار ﻮ ﻟا ﻊﺑﺎﺗ زا هدﺎﺳ راد ﻨﻌﻣ نآ یاﺮﺑcout«رﻮﺘﺳد ﻪﮐ یﺮﯿﻐﺘﻣ ﺮﻫ ﺎﯾ و double ، float ، int عﻮﻧ زا ﯽﯾﺎﻫﺮﯿﻐﺘﻣ یاﺮﺑ ار ﻊﺑﺎﺗ ﻦﯾا .ﺪﻫد راﺮﻗ هدﺎﻔﺘﺳا درﻮﻣ ﺪﺷﺎﺑ template <typename T>
void print(T a) { cout << a;
}
int main(){
double x = 2.3;
print(x);
int y = 10;
print(y);
return 0;
}
ﻢﯿﻧاﻮﺗ ﻣ ﺎﻬﺳﻼﮐ ﻪﻧﺪﺑ رد .دروآرد ( ﻠﮐ) generic ﺎﯾ ﻮ ﻟا ﺖﻟﺎﺣ ﻪﺑ ﺰﯿﻧ ار ﺎﻬﺳﻼﮐ ﻞ ﺷ ﻦﯿﻤﻫ ﻪﺑ ناﻮﺗ ﻣ رﻮﻄﺑ ﺎﻀﻋا ﻦﯾا عﻮﻧ سﻼﮐ ﻦﯾا زا ﯽﯾﺎﯿﺷا دﺎﺠﯾا ﻊﻗﻮﻣ ﺎﻬﻨﺗ .ﺪﻨﺘﺴﻫ T ﺮﯿﻐﺘﻣ عﻮﻧ زا ﻪﮐ ﻢﯿﺷﺎﺑ ﻪﺘﺷاد ﯽﯾﺎﻀﻋا سﻼﮐ ﯾ ﺖﻘﯿﻘﺣ رد vector سﻼﮐ .ﻢﯾا هدﺮﮐ رﺎﮐ ﺖﺳد ﻦﯾا زا یا ﻪﻧﻮﻤﻧ ﺎﺑ ﻼﺒﻗ .دﻮﺷ ﻣ ﺺﺨﺸﻣ ﺢﯾﺮﺻ .دﻮﺷ ﻣ ﺺﺨﺸﻣ ﺢﯾﺮﺻ رﻮﻄﺑ رﻮﺘﮐو هداد عﻮﻧ ،رﻮﺘﮐو ﯾ نﻼﻋا ﻊﻗﻮﻣ .ﺖﺳﻮ ﻟا
#include<iostream>
#include<vector>
#include "point.h"
int main(){
vector <int> vec1;
vector <double> vec2;
vector <Point> vec3;
return 0;
}
Array سﻼﮐ .ﺪﻨﮐ ﺖﻓﺎﯾرد ار ﻋﻮﻧ ﺮﺘﻣارﺎﭘ ناﻮﻨﻋ ﻪﺑ vector ﺪﻨﻧﺎﻣ ﻪﮐ ﻢﯾزﺎﺳ ﻣ ﺳﻼﮐ ﻦﯾﺮﻤﺗ یاﺮﺑ نﻮﻨﮐا یاﺮﺑ ار T ﻪﺳﺎﻨﺷ ﺎﻣ ﺎﺠﻨﯾا رد .ﺖﺳا هﺪﺷ نﻼﻋا ﺮﯿﻐﺘﻣ ترﻮﺼﺑ ﻪﯾارآ ﺮﺻﺎﻨﻋ عﻮﻧ .ﺖﺳا ﺮﺼﻨﻋ هد ﺎﺑ یا ﻪﯾارآ یوﺎﺣ .ﺪﻨﻨﮐ ﻣ پﺎﭼ ار نآ ﺎﯾ و ﺪﻨﻨﮐ ﻣ ﻫدراﺪﻘﻣ ار ﻪﯾارآ ﻪﮐ دراد ﻮﻀﻋ ﻊﺑﺎﺗ ود سﻼﮐ .ﻢﯾا هﺪﯾﺰﮔﺮﺑ ﺮﯿﻐﺘﻣ ﻦﯾا یراﺬ ﻣﺎﻧ
#include<iostream>
#include "point.h"
template <class T>
class Array{
public:
T x[10];
void setArray(T t){
for(int i=0;i<10;i++) x[i]=t;
}
void printArray(){
for(int i=0;i<10;i++) std::cout<<x[i];
} };
هاﺮﻤﻫ) ﻞﻣﺎﮐ رﻮﻄﺑ ار سﻼﮐ تﺎﺼﺨﺸﻣ و ﻢﺳا ﺪﯾﺎﺑ ﻢﯿﻨﮐ ﻒﯾﺮﻌﺗ سﻼﮐ ﻪﻧﺪﺑ زا جرﺎﺧ ار ﻊﺑﺎﺗ ﻢﯿﻫاﻮﺨﺑ ﺮﮔا .دﻮﺑ ﺪﻫاﻮﺧArray<T>ترﻮﺼﺑ ﺎﻣ سﻼﮐ ﻢﺳا .ﻢﯿﻨﮐ ﺮﮐذ (نآ یﻮ ﻟا ﻪﺼﺨﺸﻣ ﺎﺑ
#include<iostream>
#include "point.h"
template <class T>
class Array{
public:
T x[10];
void setArray(T t);
void printArray();
};
template <class T>
void Array<T>::setArray(T t){
for(int i=0;i<10;i++) x[i]=t;
}
template <class T>
void Array<T>::printArray(){
for(int i=0;i<10;i++) std::cout<<x[i];
}
int main(){
Array <int> a1;
a1.setArray(30);
Array <double> a2;
a2.setArray(3.2);
Array <Point> a3;
a3.setArray(Point(1,2));
return 0;
}
ﻮ ﻟا ﺖﺴﯿﻟ سﻼﮐ ﯾ ١ . ١
ﻪﺑ طﻮﺑﺮﻣ تﺎﻋﻼﻃا یزﺎﺳ هﺮﯿﺧذ و ﺮﯿﯿﻐﺗ ،ﯽﺑﺎﯾزﺎﺑ یاﺮﺑ ار LinkedList یﺪﻧﻮﯿﭘ ﺖﺴﯿﻟ سﻼﮐ ،ﻞﺒﻗ سرد رد ﺎﺠﻨﯾا رد) صﺎﺧ ﻋﻮﻧ ﻪﺑ ﻪﺘﺴﺑاو ﻪﮐ ﺖﺳا ﻦﯾا سﻼﮐ ﻦﯾا یﺎﻬﻔﻌﺿ زا ﯾ .ﻢﯾدﺮﮐ دﺎﺠﯾا ﻨﻔﻠﺗ یﺎﻬﺳﺎﻤﺗ راﺮﻗ هدﺎﻔﺘﺳا درﻮﻣ ﺪﻧاﻮﺗ ﻣ ﻨﻔﻠﺗ یﺎﻬﺳﺎﻤﺗ ﻪﺑ طﻮﺑﺮﻣ تﺎﻋﻼﻃا یزﺎﺳ هﺮﯿﺧذ یاﺮﺑ ﺎﻬﻨﺗ ﻨﻌﯾ .ﺖﺳا CallNode) .دﺮﯿ ﺑ class LinkedList{
private:
int length;
public:
CallNode* First;
CallNode* Last;
void insert_last(CallNode * ptr);
void insert_first(CallNode * ptr);
void remove_next(CallNode * ptr);
void remove_first();
void remove_last();
bool isEmpty();
int size();
void print();
void clear();
LinkedList():First(NULL),Last(NULL),length(0){}
~LinkedList(){clear();}
};
ﯽﺑﺎﯾزﺎﺑ ،ندﺮﮐ ﻪﻓﺎﺿا ﻠﺻا لﺎﻤﻋا ﻪﮐ (رﻮﺘﮐو ﺪﻨﻧﺎﻣ) ﻢﯿﺷﺎﺑ ﻪﺘﺷاد ﻠﮐ و ﺮﺗ ﻋاﺰﺘﻧا ﺳﻼﮐ ﻢﯿﻫاﻮﺨﺑ ﺮﮔا ﻦﯾا یاﺮﺑ .ﻢﯿﻨﮐ ﻒﯾﺮﻌﺗ ﻮ ﻟا ترﻮﺼﺑ ار نآ ﻢﯿﻧاﻮﺗ ﻣ ،ﺪﺷﺎﺒﻧ صﺎﺧ ﻋﻮﻧ ﻪﺑ ﻪﺘﺴﺑاو ﻟو ﺪﻫد مﺎﺠﻧا ار فﺬﺣ و ﻒﯾﺮﻌﺗ یﺪﻧﻮﯿﭘ ﺖﺴﯿﻟ ﺮﺻﺎﻨﻋ یاﺮﺑ Node سﻼﮐ .ﻢﯾروآرد ﻮ ﻟا ترﻮﺼﺑ ار Node سﻼﮐ ﺪﯾﺎﺑ اﺪﺘﺑا رﻮﻈﻨﻣ ﻮ ﻟا ترﻮﺼﺑ ﻢﻫ List سﻼﮐ .ﺖﺳا هﺪﺷ ﻒﯾﺮﻌﺗ T ﻠﮐ عﻮﻧ زا ﺮﺼﻨﻋ ﺮﻫ ﻞﺧاد data هداد عﻮﻧ .ﺖﺳا هﺪﺷ یﺪﻧﻮﯿﭘ ﺖﺴﯿﻟ شور ﺎﺑ تﺎﻋﻼﻃا هﺮﯿﺧذ و ﯽﺑﺎﯾزﺎﺑ ﻪﮐ ﺖﺴﯿﻧ ﺺﺨﺸﻣ نوﺮﯿﺑ زا ﺪﯿﻨﮐ ﺖﻗد .ﺖﺳا هﺪﺷ ﻒﯾﺮﻌﺗ و ندﺮﮐ ﻪﻓﺎﺿا ﻞﻣﺎﺷ ﻪﮐ نآ ﻣﻮﻤﻋ ﻊﺑاﻮﺗ ﺎﻬﻨﺗ ﺪﻨﮐ ﻣ هدﺎﻔﺘﺳا List سﻼﮐ زا ﻪﮐ ﺴﯾﻮﻧ ﻪﻣﺎﻧﺮﺑ .دﻮﺷ ﻣ مﺎﺠﻧا ﺮﺼﻨﻋ ﻦﯿﻣاiﻪﺑ ﺳﺮﺘﺳد یاﺮﺑ ار [] ﺮ ﻠﻤﻋ ﺎﻣ ﻪﮐ ﺖﺳا ﺮﮐذ نﺎﯾﺎﺷ .ﺪﻨﯿﺑ ﻣ ار ﺖﺳﺎﻬﻨﯾا لﺎﺜﻣا و ﺮﺻﺎﻨﻋ فﺬﺣ .ﻢﯾا هدﺮﮐ یراﺬﮔرﺎﺑﺮﺳ ﺖﺴﯿﻟ
//file templatelist.h
#include<iostream>
#include<cstdlib>
using namespace std;
template <class T>
class Node{
private:
T data;
public:
Node<T> * next;
Node(): next(NULL) {}
Node(T &d):data(d), next(NULL){}
T getData();
};
template <class T>
T Node<T>::getData(){
return data;
}
template<class T>
class List{
private:
long int length;
Node<T>* First;
Node<T>* Last;
public:
void insert_last(T t);
void insert_first(T t);
void remove_next(T t);
void remove_first();
void remove_last();
bool isEmpty();
int size();
void clear();
List():First(NULL),Last(NULL),length(0){}
~List(){clear();}
T operator [](int n);
};
List سﻼﮐ ﻊﺑاﻮﺗ یزﺎﺳ هدﺎﯿﭘ template<class T>
bool List<T>::isEmpty(){
if (length==0) return true;
else
return false;
}
template<class T>
int List<T>::size(){
return length;
}
template<class T>
void List<T>::remove_first(){
if(First==NULL){
cout<<"The list is empty.";
return;
}
if(First==Last){
delete First;
First=NULL;
Last=NULL;
length--;
return;
}
Node<T>* temp=First;
First=First->next;
delete temp;
length--;
}
template<class T>
void List<T>::clear(){
Node<T> * temp =First;
Node<T> * temp1;
while(temp!=NULL){
temp1 = temp->next;
delete temp;
temp = temp1;
}
First=NULL;
Last =NULL;
length=0;
}
template<class T>
void List<T>::remove_last(){
if(First==NULL){
cout<<"The List is empty"<<endl;
return;
}
if(First ==Last){
delete First;
First=NULL;
Last=NULL;
length--;
return;
}
Node<T> * temp = First;
while(temp->next != Last) temp = temp->next;
Last = temp;
delete temp->next;
temp->next =NULL;
}
template<class T>
void List<T>::insert_last(T t){
Node<T> * nodet = new Node<T>(t);
if(First==NULL){
First= nodet;
nodet->next= NULL;
Last = First;
length++;
return;
}
Last->next=nodet;
Last = nodet;
nodet->next=NULL;
length++;
}
template<class T>
void List<T>::insert_first(T t){
Node<T> * nodet = new Node<T>(t);
if(First==NULL){
nodet->next = First;
First = nodet;
Last = First;
length++;
return;
}
nodet->next =First;
First = nodet;
length++;
}
List سﻼﮐ زا هدﺎﻔﺘﺳا
#include<iostream>
#include<string>
#include<ctime>
#include "templatelist.h"
#include "point.h"
using namespace std;
int main(){
List <Point> L;
Point x(2,3);
Point y(4,5);
L.insert_last(x);
L.insert_last(y);
long int t0=time(0);
for(long int i=0;i<50000;i++){
Point x(1,1);
L.insert_last(x);
}
long int t1= time(0);
cout<< "Insert Time:"<< t1 - t0<<endl;
for(int i=0;i<L.size();i++) L[i];
long int t2= time(0);
cout<< "Access Time:"<< t2 - t1<<endl;
return 0;
}