我试图旋转一组模板类的值 这些是说明
实现一个函数,在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;
}
}
答案 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