旋转函数C ++

时间:2014-11-19 22:10:26

标签: c++ rotation

我试图旋转一组模板类的值 这些是说明

  

实现一个函数,在3个变量中向前旋转值。大于3的旋转环绕。此函数必须支持多种类型,并使用以下原型:

template <class T>    
void rotate (T & a, T & b, T & c, int r); 
#include <iostream>
#include <string> 

using std::string; 
using std::endl; 
using std::cin;
using std::cout; 

template <class T> 
void rotate (T & a, T & b, T & c); 

int main () 
{
    int x = 1; 
    int y = 2; 
    int z = 3;  

    cout << rotate(x, y, z) << endl;

    return 0;   
}

template <class T>
void rotate (T&a, T&b, T&c)
{
    T & d = b; 
    while (a != d) 
    {
        swap(&a++, &d++); 
        if (d == c) 
            d = b; 
        else if (a == b) 
            b == d;  

    }
}

2 个答案:

答案 0 :(得分:0)

如果我猜对了你想要的是在a,b,c之间旋转的值。在您的原始函数中,您有int r但在最终实现中缺少r。首先取r%3并旋转该数量。旋转很简单,你最初的想法只需要正确地充实它。

答案 1 :(得分:0)

你最好的方法是使用这样的for循环:

template <class T>
void rotate(T &a, T &b, T&c, int r)
{
 T temp = 0;
 for (int i = 0; i < r; i++)
 {
   temp = c;
   c = b;
   b = a;
   a = temp;
 }
}

然后主函数中的调用将是:

rotate(x, y, z, 4); //4 is the number of rotations