2009-10-26 74 views
1

没有使用任何stls,boosts和类似的东西我一直试图旋转我的数组中的元素。我一直在尝试使用mod运算符,是有效的:使用mod运算符C++

void stack::rotate(int r) 
{ 
r = (r % maxSize + maxSize) % maxSize; 
for (int first_index = 0; first_index < r; ++first_index) 
{ 
    int mem = items[first_index].n; 
    int index = (first_index + r) % maxSize, index_prev = first_index; 
    while (index != first_index) 
    { 
    items[index_prev] = items[index]; 
    index_prev = index; 
    index = (index + r) % maxSize; 
    } 
    items[index_prev].n = mem; 
} 

如果项目是一个数组分配到项目结构。虽然它有点奇怪,但项目struct有一个整数'n'成员,所以我可以将它与整数类型的变量一起使用。

但它仍然没有从正在添加右=(。林失去了我的第二个元素的内容,我认为它的休息时间;)

回答

2

提示:

添加断言(r是正的,非零?,低于maxsizemaxsize非零等)

编写测试对于这个函数,从一个简单的数组开始,然后向上。不要把它们扔掉 - 把它们写下来并连续运行。

给变量指定明确的名称。

请勿重复使用r

你的代码对我来说看起来有点太晦涩。乍一看,它正在哭“在这里发生一次错误!快来看看!”。断言每一个可能的边界错误。

对于任何更详细的答案,你应该扩大一点“它仍然没有出来右”