这里我们使用rotate函数。具体函数作用可见代码输出。
//#include "learn.h"
#include<stdio.h>
#include<iostream>
#include<vector>
#include<map>
#include<list>
#include<string>
#include<iterator>
#include<stdlib.h>
#include<algorithm>
using namespace std;
template<typename datatype>
void ChangeOrder(vector<datatype> &V, int pos)//模板方法
{
for (int i = 0; i < V.size(); i++)
cout << V[i] << " ";
cout << endl;
if (!(pos >= 0))
return;
if (pos >= V.size())
return;
rotate(V.begin(), V.begin() + pos, V.end());
for (int i = 0; i < V.size(); i++)
cout << V[i] << " ";
cout << endl;
rotate(V.begin(), V.begin() + 1, V.begin() + (V.size() - pos));
for (int i = 0; i < V.size(); i++)
cout << V[i] << " ";
cout << endl;
}
void changeorder(vector<int> &V,int pos)
{
for (int i = 0; i < V.size(); i++)
cout << V[i] <<" ";
cout << endl;
if (!(pos >= 0))
return;
if (pos >= V.size())
return;
rotate(V.begin(),V.begin()+pos,V.end());
for (int i = 0; i < V.size(); i++)
cout << V[i]<<" ";
cout << endl;
rotate(V.begin(), V.begin() + 1, V.begin() + (V.size() - pos));
for (int i = 0; i < V.size(); i++)
cout << V[i] <<" ";
cout << endl;
}
int main()
{
int array[10] = { 0,1,2,3,4,5,6,7,8,9 };
vector<int> V(array, array + 10);
//changeorder(V, 5);
ChangeOrder(V, 5);
}
运行结果为
假设原集合顺序为 A~B~C(~为AB和BC之间的元素) 其中rotate(A,B,C)函数执行成功之后,集合元素顺序为B~CA~,即相当于把B即后边的元素换到A前边来。