c++ - 如何在C++中旋转 vector 中的每个第N个元素

标签 c++

我正在尝试旋转 vector 中的每个第 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])

最佳答案

只需使用迭代器从初始 vector 创建具有指定最大长度的子范围,然后旋转其中的每一个。

#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, first + 1, 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(), v.end(), [](int c) { cout << c << "\t"; });
    cout << endl;
    return 0;
}

将输出:

65      74      88      71      100     45      35      63      11      67    

关于c++ - 如何在C++中旋转 vector 中的每个第N个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52351080/

相关文章:

c++ - Nginx + fastcgi 多线程

c++ - 通过 TCP 套接字发送大的 Base64 字符串

c++ - 选择套接字会弄乱数据

c++ - 为什么我无法调用 'explicit a (string x)' ?

c++ - std::chrono::high_resolution_clock 和屏幕刷新率的准确度(不是精度)

c++ - QT 找不到要使用的正确 OpenGL api

c++ - unique_ptr vector 的迭代器的访问成员

c++ - 如何创建具有预定义状态的自定义 Quick QML 项

c++ - Arduino progmem 读回乱码数据

c++ - 加倍流