1. 程式人生 > 其它 >c++ std標準庫 演算法<algorithm> 迴圈移動 rotate() rotate_copy()

c++ std標準庫 演算法<algorithm> 迴圈移動 rotate() rotate_copy()

技術標籤:# 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; }

image-20201217194127732