在不使用任何STL,boost等的情况下,我一直在尝试旋转数组中的元素。我一直在尝试使用mod运算符,以提高效率:

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;
 }

其中items是项目结构的分配数组。尽管有点怪异,但该项目结构具有一个整数'n'成员,因此我可以将其与整数类型变量一起使用。

但是它仍然不能正确显示=(。我丢失了我第二个元素的内容。我认为它的中断时间;)

最佳答案

提示:

添加断言(r为正,非零?,小于maxsizemaxsize为非零,等等)

为此函数编写测试,从一个简单的数组开始,然后进行。不要扔掉它们-让它们保持书写状态并连续运行它们。

给变量明确名称。

不要重复使用r

您的代码对我来说有点晦涩难懂。乍一看,它在哭:“这里有一个错误!快来看!”。声明每个可能的边界错误。

对于任何更详细的答案,您应该扩大“它仍然不能正确显示”的内容。

10-08 08:24