STL algorithm算法rotate,rotate_copy(51)
來源:程序員人生 發布時間:2014-10-14 05:15:29 閱讀次數:3311次
rotate原型:
std::rotate
template <class ForwardIterator>
ForwardIterator rotate (ForwardIterator first, ForwardIterator middle,
ForwardIterator last);
該函數是循環移位函數。
效果是交換[middle,last)和[first,middle)部分的位置。
具體實現請自行搜索。
類似實現為:
template <class ForwardIterator>
void rotate (ForwardIterator first, ForwardIterator middle,
ForwardIterator last)
{
ForwardIterator next = middle;
while (first!=next)
{
swap (*first++,*next++);
if (next==last) next=middle;
else if (first==middle) middle=next;
}
}
一個簡單的例子:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void mrotate()
{
vector<int> vi{1,2,3,4,5,6};
vector<int> vresult{10,20,30,40,50};
cout<<"vi=";
for(int i:vi)
cout<<i<<" ";
cout<<endl;
cout<<"vresult=";
for(int i:vresult)
cout<<i<<" ";
cout<<endl;
rotate(vi.begin(),vi.begin()+3,vi.end());
rotate(vresult.begin(),vresult.end()-1,vresult.end());
cout<<"after rotate(vi.begin(),vi.begin()+3,vi.end())"<<endl;
cout<<"vi=";
for(int i:vi)
cout<<i<<" ";
cout<<endl;
cout<<"after rotate(vresult.begin(),vresult.end()-1,vresult.end());"<<endl;
cout<<"vresult=";
for(int i:vresult)
cout<<i<<" ";
cout<<endl;
}
運行截圖:

rotate_copy原型:
std::rotate_copy
template <class ForwardIterator, class OutputIterator>
OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle,
ForwardIterator last, OutputIterator result);
該函數是將rotate后的序列存放到result開始的位置。
實現類似于:
template <class ForwardIterator, class OutputIterator>
OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle,
ForwardIterator last, OutputIterator result)
{
result=std::copy (middle,last,result);
return std::copy (first,middle,result);
}
一個簡單的例子:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void mrotatecopy()
{
vector<int> vi{1,2,3,4,5,6};
vector<int> vresult(6);
cout<<"vi=";
for(int i:vi)
cout<<i<<" ";
cout<<endl;
cout<<"vresult=";
for(int i:vresult)
cout<<i<<" ";
cout<<endl;
rotate_copy(vi.begin(),vi.begin()+3,vi.end(),vresult.begin());
cout<<"after rotate_copy(vi.begin(),vi.begin()+3,vi.end(),vresult.begin())"<<endl;
cout<<"vi=";
for(int i:vi)
cout<<i<<" ";
cout<<endl;
cout<<"vresult=";
for(int i:vresult)
cout<<i<<" ";
cout<<endl;
}
運行截圖:

――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
//寫的錯誤或者不好的地方請多多指導,可以在下面留言或者點擊左上方郵件地址給我發郵件,指出我的錯誤以及不足,以便我修改,更好的分享給大家,謝謝。
轉載請注明出處:http://blog.csdn.net/qq844352155
author:天下無雙
Email:coderguang@gmail.com
2014-9-26
于GDUT
――――――――――――――――――――――――――――――――――――――――――――――――――
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈