C++中数组逆序可通过双指针法或STL的reverse函数实现:1. 双指针从两端交换元素,时间复杂度O(n),空间复杂度O(1);2. 使用中的reverse(arr, arr+n)更简洁;3. 对vector可用reverse(vec.begin(), vec.end())。手动实现助于理解原理,STL方法适合实际开发。

在C++中实现数组逆序(元素反转)是一个常见的基础操作。核心思路是通过双指针从数组两端向中间靠拢,逐个交换元素,直到完成整个数组的反转。这种方法效率高,时间复杂度为 O(n),空间复杂度为 O(1)。
使用双指针实现数组反转
定义两个指针,一个指向数组首元素,另一个指向末元素,然后交换它们的值,并向中间移动,直到两个指针相遇。
示例代码:
#includeusing namespace std; void reverseArray(int arr[], int n) { int left = 0; int right = n - 1; while (left < right) { // 交换 left 和 right 指向的元素 int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } }
int main() { int arr[] = {1, 2, 3, 4, 5}; int n = sizeof(arr) / sizeof(arr[0]);
cout zuojiankuohaophpcnzuojiankuohaophpcn "原数组: "; for (int i = 0; i zuojiankuohaophpcn n; i++) { cout zuojiankuohaophpcnzuojiankuohaophpcn arr[i] zuojiankuohaophpcnzuojiankuohaophpcn " "; } cout zuojiankuohaophpcnzuojiankuohaophpcn endl; reverseArray(arr, n); cout zuojiankuohaophpcnzuojiankuohaophpcn "逆序后: "; for (int i = 0; i zuojiankuohaophpcn n; i++) { cout zuojiankuohaophpcnzuojiankuohaophpcn arr[i] zuojiankuohaophpcnzuojiankuohaophpcn " "; } cout zuojiankuohaophpcnzuojiankuohaophpcn endl; return 0;}
立即学习“C++免费学习笔记(深入)”;
利用STL中的reverse函数
C++标准库提供了 std::reverse 函数,可以更简洁地实现数组或容器的反转,包含头文件
示例代码:
#include#include using namespace std; int main() { int arr[] = {1, 2, 3, 4, 5}; int n = sizeof(arr) / sizeof(arr[0]);
cout zuojiankuohaophpcnzuojiankuohaophpcn "原数组: "; for (int i = 0; i zuojiankuohaophpcn n; i++) { cout zuojiankuohaophpcnzuojiankuohaophpcn arr[i] zuojiankuohaophpcnzuojiankuohaophpcn " "; } cout zuojiankuohaophpcnzuojiankuohaophpcn endl; reverse(arr, arr + n); // 反转整个数组 cout zuojiankuohaophpcnzuojiankuohaophpcn "逆序后: "; for (int i = 0; i zuojiankuohaophpcn n; i++) { cout zuojiankuohaophpcnzuojiankuohaophpcn arr[i] zuojiankuohaophpcnzuojiankuohaophpcn " "; } cout zuojiankuohaophpcnzuojiankuohaophpcn endl; return 0;}
立即学习“C++免费学习笔记(深入)”;
处理动态数组(vector)的反转
如果使用 std::vector,同样可以使用双指针或 std::reverse,操作更加灵活。
示例:
#include#include #include using namespace std; int main() { vector
vec = {1, 2, 3, 4, 5}; cout zuojiankuohaophpcnzuojiankuohaophpcn "原向量: "; for (int x : vec) { cout zuojiankuohaophpcnzuojiankuohaophpcn x zuojiankuohaophpcnzuojiankuohaophpcn " "; } cout zuojiankuohaophpcnzuojiankuohaophpcn endl; reverse(vec.begin(), vec.end()); cout zuojiankuohaophpcnzuojiankuohaophpcn "逆序后: "; for (int x : vec) { cout zuojiankuohaophpcnzuojiankuohaophpcn x zuojiankuohaophpcnzuojiankuohaophpcn " "; } cout zuojiankuohaophpcnzuojiankuohaophpcn endl; return 0;}
立即学习“C++免费学习笔记(深入)”;
基本上就这些。手动实现有助于理解算法本质,而使用STL函数则更高效、简洁,适合实际开发。根据场景选择合适的方法即可。










