Sunday, November 6, 2016

Rotate and Slide

{1,2,3,4,5,6,7,8,9,10}
Rotate(f,m,l) f<m<l,moves [m,l) displace [f,m)=>[m,l)[f,m)
R(2,4,5)=R(f,m,l)=>{1,4,2,3,5...} 
 vector<int> v{ 1,2,3,4,5,6,7,8,9,10 };
 rotate(v.begin() + 1, v.begin() + 3, v.begin()+4);

Slide S(p,b,e)=[be)[pb)/S(b,e,p)=[ep)[be)
note pair construct differs to make pair.first= [be) iter

template <typename RI> //random forward iter
auto slide(RI b, RI e, RI p)->pair
{
 if (p < b)
 {
  return{ rotate(p,b,e),p };
 }
 if (e < p )
 {
  return{p, rotate(b, e, p) };
 }
 return{b,e};
};

int main()
{
 vector<int> v{ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 };
 auto v1 = v, v2 = v, v3 = v;
 rotate(v1.begin() + 2, v1.begin() + 4, v1.begin()+5);
 auto p_s2 = slide(v2.begin() +6 , v2.begin() + 8, v2.begin() + 2);
 auto p_s11 = slide(v3.begin() + 6, v3.begin() + 8, v3.begin() + 11);
 cout << (*p_s2.first) << endl;
 cout << (*p_s2.second) << endl;

 cout << (*p_s11.first) << endl;
 cout << (*p_s11.second) << endl;

 std::string s;
 getline(cin, s);
    return 0;
}

No comments:

Post a Comment