如何旋转c中向量中的每个第N个元素
发布时间:2020-12-16 09:21:47 所属栏目:百科 来源:网络整理
导读:我正在尝试旋转向量中的每个第n个元素.我知道c中有一个旋转功能,但我怎么能旋转每个第n个元素? 例如: ([71 65 74 88 63 100 45 35 67 11])--[65 74 88 71 100 45 35 63 11 67] 对于上面的例子,如果n = 4那么旋转应该在每个第4个元素处发生. 1st--([71 65 7
我正在尝试旋转向量中的每个第n个元素.我知道c中有一个旋转功能,但我怎么能旋转每个第n个元素?
例如: ([71 65 74 88 63 100 45 35 67 11])-->[65 74 88 71 100 45 35 63 11 67] 对于上面的例子,如果n = 4那么旋转应该在每个第4个元素处发生. 1st-->([71 65 74 88])-->([65 74 88 71]) 2nd-->([63 100 45 35])-->([100 45 35 63]) 3rd-->([67 11])-->([11 67]) 解决方法
只需使用迭代器从初始向量创建具有指定最大长度的子范围,然后旋转它们中的每一个.
#include <vector> #include <iostream> #include <algorithm> using namespace std; template <class ForwardIterator> void myrotate_nth (ForwardIterator first,ForwardIterator last,typename std::iterator_traits<ForwardIterator>::difference_type n) { while (last - first > n) { ForwardIterator tmp = first + n; rotate(first,first + 1,tmp); first = tmp; } rotate(first,last); } int main() { std::vector<int> v = { 71,65,74,88,63,100,45,35,67,11 }; myrotate_nth(v.begin(),v.end(),4); for_each(v.begin(),[](int c) { cout << c << "t"; }); cout << endl; return 0; } 将输出: 65 74 88 71 100 45 35 63 11 67 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |