取消成员指针



i具有一个C 结构,该结构具有动态分配的数组作为指针。我有扭转数组的功能,但它似乎不起作用(我认为这是因为临时变量指向原始值)。

struct s {
   int *array;
   int length;
   ...
   s(int n) {
       this->array = new int[n];
       this->length = n;
   }
   ...
   void reverse() {
       for (int i = 0; i < this->length; i++) {
           int n = this->array[i];
           this->array[i] = this->array[this->length - i - 1];
           this->array[this->length - i - 1] = n;
       }
   }
   ...
}

我认为这是this->array[this->length - i - 1] = this->array[i]因此,数组保持不变,不会逆转。我不知道如何尊重数组指针或如何将this->array[i]的值在n中获取。

您的反面不起作用的原因是您要经历整个数组的长度。您只需要经过一半。如果您经历下半场,那么您将取消逆转。

作为一个例子,如果您尝试逆转[1, 2, 3, 4],则获得

after i = 0: [4, 2, 3, 1]
after i = 1: [4, 3, 2, 1]
--- reversed ---
after i = 2: [4, 2, 3, 1]
after i = 3: [1, 2, 3, 4]
--- back to original ---

而是使您的循环

for (int i = 0; i < this->length / 2; i++) {
    ...
}

在旁注上,使用2个索引器将大大简化您的代码:

void reverse()
{
    int limit = length / 2;
    for ( int front = 0 , back = length - 1; front < limit; front++ , back-- )
    {
        int n = array[front];
        array[front] = array[back];
        array[back] = n;
    }
}

最新更新