{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;
}
Sunday, November 6, 2016
Rotate and Slide
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment