STL之修改集合里边元素的顺序

这里我们使用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);
}

 

运行结果为

 

STL之修改集合里边元素的顺序

 

假设原集合顺序为  A~B~C(~为AB和BC之间的元素)   其中rotate(A,B,C)函数执行成功之后,集合元素顺序为B~CA~,即相当于把B即后边的元素换到A前边来。