Дополнительно к iseq() определите oseq(). Выходная последовательность, которая задается как аргумент oseq(), должна замещаться выходной последовательностью использующего oseq() алгоритма. Определите подходящий набор перегрузок для по крайней мере трех стандартных алгоритмов по вашему выбору.
Да как то не сильно ахота разбирать и все возможные функции перегружать. Честно сказать одну функцию transform перегружу и все, Попробую еще для массивов перегрузить и для функционального объекта.
Лень мне музолить его долго, в общем от что получилось, то получилось, маленький конечно кусочек для одного transform сделал.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
#include <iostream> using std::cout; using std::endl; #include <algorithm> using std::transform; #include <vector> using std::vector; #include <utility> using std::pair; //Iseq для одной пары template<class In> struct Oseq { In ii3; Oseq(In i1) : ii3(i1){} }; //iseq для одной пары template<class C> Oseq<typename C::iterator> oseq(C& c)//для всего контейнера { return Oseq<typename C::iterator>(c.begin()); } //перегрузка transform для объектов и функции template<class In,class T> void transform(In i, In i1,Oseq<In> r,const T& v)//расширение { cout <<"Mu tyt"<<endl; transform(i,i1,r.ii3,v); return; } //перегрузим transform для массивов /*template<class In,class T> void transform(In i, In i1,Oseq<In> r,const T& v) { cout <<"dl9 T*"<<endl; transform(i,i1,r.ii3,v); }*/ int fun(int i){return (++i);} int main() { int mass[]={1,2,3,4,5}; vector<int> v(mass,mass+5); int mass1[5]; vector<int> v1(5); transform(v.begin(),v.end(),oseq(v1),fun); //вывод результатов for(int i=0;i<v1.size();i++) cout <<v1[i]<<' '; cout <<endl; //пробуем для массива transform(mass,mass+5,mass1,fun); //вывод результатов for(int* p=mass1;p!=mass1+sizeof(mass1)/sizeof(int);p++) cout <<*p<<' '; cout <<endl; return 0; } |
[youtube]http://www.youtube.com/watch?v=w7ksdioz79Q[/youtube]