C++:如何实现数组元素逆置?多种方法

方法1:使用额外的数组 这是一种比较简单的方法,它创建一个额外的数组来存储逆置后的元素,然后将其复制回原始数组。

#include <iostream>

void reverseArray(int arr[], int size) {
    int reversed[size];
    for (int i = 0; i < size; i++) {
        reversed[i] = arr[size - 1 - i];
    }
    for (int i = 0; i < size; i++) {
        arr[i] = reversed[i];
    }
}

int main() {
    int myArray[] = {1, 2, 3, 4, 5};
    int size = sizeof(myArray) / sizeof(myArray[0]);
    
    reverseArray(myArray, size);
    
    for (int i = 0; i < size; i++) {
        std::cout << myArray[i] << " ";
    }
    
    return 0;
}

方法2:使用两个指针 这种方法使用两个指针,一个指向数组的开头,另一个指向数组的末尾,然后交换它们指向的元素,逐步向中间移动。

#include <iostream>

void reverseArray(int arr[], int size) {
    int start = 0;
    int end = size - 1;
    
    while (start < end) {
        // 交换元素
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        
        // 移动指针
        start++;
        end--;
    }
}

int main() {
    int myArray[] = {1, 2, 3, 4, 5};
    int size = sizeof(myArray) / sizeof(myArray[0]);
    
    reverseArray(myArray, size);
    
    for (int i = 0; i < size; i++) {
        std::cout << myArray[i] << " ";
    }
    
    return 0;
}

这两种方法都可以成功逆置数组中的元素。选择哪种方法取决于您的需求和性能要求。方法2通常更节省内存,因为它不需要额外的数组来存储逆置后的元素。

小傻瓜提问:第一种方法为啥不会发生我操作的是localvariable而导致原数组不改变的问题

在第一种方法中,确实会创建一个名为 reversed 的局部数组,然后将逆置后的元素复制回原始数组 arr。这是因为数组在C++中是传值的,函数参数 arr 接受了原始数组的一个副本,而不是原始数组本身。因此,对 reversed 数组的操作不会影响原始数组 myArray

在这种情况下,逆置是在 reversed 数组中进行的,然后再将其内容复制回原始数组。这样做确保了原始数组不会被修改,因为它们是不同的内存位置。

提问:第二种我操作的那个函数为啥不用加&?

在第二种方法中,不需要使用 & 运算符来传递数组的地址,因为数组名本身在C++中被解释为指向数组的首元素的指针。

当您在函数参数中使用数组名时,实际上是将指向数组的首元素的指针传递给函数,而不是整个数组的副本。因此,在 reverseArray 函数中,arr 参数是一个指向数组的指针,它指向传递给函数的原始数组。

因此,在函数中对 arr 操作实际上就是在原始数组上进行操作。您无需使用 & 运算符来获取数组的地址,因为数组名本身已经是一个指向数组的指针。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值