在不使用任何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
为正,非零?,小于maxsize
,maxsize
为非零,等等)
为此函数编写测试,从一个简单的数组开始,然后进行。不要扔掉它们-让它们保持书写状态并连续运行它们。
给变量明确名称。
不要重复使用r
。
您的代码对我来说有点晦涩难懂。乍一看,它在哭:“这里有一个错误!快来看!”。声明每个可能的边界错误。
对于任何更详细的答案,您应该扩大“它仍然不能正确显示”的内容。