#include <iostream>
#include <list>
#include <iomanip>
using namespace std;
using rot_pos = long long int ;
template <class T>
ostream & operator<<(ostream & o,const list<T> & list ) {
for(const auto & i: list) {
cout<<" "<<i;
}
return o;
}
template <class T>
void crol( list<T> original , rot_pos p ) {
//CycleROtatetoLeft
auto itr_p=original.begin();
cout<<setw(2)<<setfill('0')<<p;
p%=original.size();
advance(itr_p,p);
list<int> behindp;
behindp.splice(behindp.end(),original,itr_p,original.end());
original.reverse();
behindp.reverse();
behindp.merge(original);
behindp.reverse();
cout<<": "<<behindp<<endl;
}
template <class T>
void crol2(list<T> original , rot_pos p ) {
cout<<setw(2)<<setfill('0')<<p;
while(p--) {
original.push_back(original.front());
original.pop_front();
}
cout<<": "<<original<<endl;
}
int main() {
//Put n integers in the array original
// and left shift and rotate p locations into right end
list<int> original {0,1,2,3,4,5,6,7,8,9};
for( rot_pos p=0; p<original.size()*2; p++)
crol(original,p);//call 1
// crol2(original,p);//call 2
// These 2 calls are both useful
}
【C++熟悉list训练】左移右入CycleROtatetoLeft
最新推荐文章于 2024-09-11 22:33:26 发布