PDA

View Full Version : سوال: ساخت قالب تابعي (الگوي تابع)



Omid707
دوشنبه 06 تیر 1390, 20:06 عصر
سلام
يک قالب تابعي بايد بنويسم که متقارن بودن يک vector را بررسي ميکند .اين تابع بايد شبيه توابع و الگوريتم هاي STL باشد در استفاده از تکرار کننده ها
تابعي براي کار با برداري از int نوشتم . ولي قالب تابع بايد با هر نوع داده اي کار کند ،کدي که تا اينجا نوشتم درسته و کار ميکنه ولي وقتي براي ساخت قالب از <template <typename استفاده ميکنم تابع کار نميکنه
اگه ساختار تابع رو عوض کنم و به جاي تکرار کننده ها از روش ديگري استفاده کنم احتمالا مشکل حل ميشه ولي ميخواهم قالب تابع مثل استاندارد STL باشه
ويک سوال ديگه ميشه کاري کرد که تابع علاوه بر بردار با هر نوع ساختمان داده اي کار کنه مثل الگوريتم ها و توابع STL
اين هم کدي که تا اينجاي کار نوشتم :

#include <iostream>
using namespace std;
#include <iterator>
#include <vector>

bool Palindrom( std::vector<int>::iterator , std::vector<int>::iterator );

void main()
{
std::vector< int > X;
std::ostream_iterator<int> OutPut( cout," ");

cout<<"\n\t Enter five integer ?";
std::istream_iterator<int> InPut( cin );
for(int i=1 ; i<=5 ; ++i)
{
X.push_back( *InPut );
++InPut;
}

cout<<"\t Your integers :";
std::copy( X.begin(), X.end(), OutPut);
cout<<"\n\t X "<<( Palindrom ( X.begin(), X.end() )? "is" : "is not" )<<" Palindrome.";
}

bool Palindrom( std::vector<int>::iterator B , std::vector<int>::iterator E)
{
--E;
while( B != E )
{
if( *B != *E )
{
return false;
}
++B;
--E;
}
return true;
}

Omid707
چهارشنبه 08 تیر 1390, 10:34 صبح
مشکل حل شد.
جواب رو همین جا میزارم فقط برای اینکه اگر کسی مشکل مشابهی با قالب های تابع و تکرار کننده ها داشت بتونه استفاده کنه.

template <typename T,typename K> bool Palindrom( std::_Vector_iterator<T,K> B,
std::_Vector_iterator<T,K> E)
{
--E;
while( B != E )
{
if( *B != *E )
{
return false;
}
++B;
--E;
}
return true;
}