c++ std標準庫 演算法<algorithm> 迴圈移動 rotate() rotate_copy()
阿新 • • 發佈:2020-12-19
技術標籤:# 4.1 C++c++stlrotate_copyrotate
std::rotate
簡介:
向左旋轉範圍內的元素
函式原型
template <class ForwardIterator>
ForwardIterator rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last);
官方手冊
http://www.cplusplus.com/reference/algorithm/rotate/
std::rotate_copy
簡介:
rotate_copy() 演算法會在新序列中生成一個序列的旋轉副本,並保持原序列不變。
函式原型
template <class ForwardIterator, class OutputIterator>
OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle,ForwardIterator last, OutputIterator result);
官方手冊
http://www.cplusplus.com/reference/algorithm/rotate_copy/
使用示例:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void main()
{
int dim[] = { 1,2,3,4,5,6,7,8,9 };
vector<int> v1, v2;
v1.assign(dim, dim + 9);
v2.assign(v1.begin(), v1.end());
cout << "vector v1: ";
copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, ", " ));
cout << "vector v2: ";
copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, ", "));
cout << endl;
cout << "【v1左移4位】vector v1: ";
rotate(v1.begin(), v1.begin() + 4, v1.end());
copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, ", "));
cout << endl;
cout << "【v1左移3位】vector v1: ";
rotate_copy(v1.begin(), v1.begin() + 3, v1.end(), ostream_iterator<int>(cout, ", "));
cout << endl;
cout << "【v2左移3位,最後3位不變】vector v2: ";
rotate(v2.begin(), v2.begin() + 2, v2.end() - 3);
copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, ", "));
cout << endl;
cout << "【v2左移3位】vector v2: ";
rotate_copy(v2.begin(), v2.begin() + 3, v2.end(), ostream_iterator<int>(cout, ", "));
cout << endl;
}