在 C++ 中的反轉陣列

Jinku Hu 2023年10月12日
  1. 在 C++ 中使用基於 vector 範圍的建構函式來反轉陣列
  2. 在 C++ 中使用 std::reverse 函式反轉陣列
  3. 在 C++ 中使用 rbegin/rend 迭代器來反轉陣列
在 C++ 中的反轉陣列

本文將講解幾種在 C++ 中如何反轉陣列的方法。

在 C++ 中使用基於 vector 範圍的建構函式來反轉陣列

vector 容器支援建構函式,其範圍由迭代器指定。因此,我們可以宣告一個新的 vector 變數,並使用 rbegin/rend 迭代器用第一個向量的反向值初始化它。

需要注意的是,我們還宣告瞭一個函式 PrintVector 來保持克隆的整潔,並在單個函式呼叫中輸出 vector 內容。這個方法的一個缺點是需要構造一個新的陣列變數,這在某些場景下可能是不必要的開銷。

#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::vector;

void PrintVector(vector<int> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, "; "));
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  vector<int> arr1_reversed(arr1.rbegin(), arr1.rend());
  PrintVector(arr1_reversed);

  return EXIT_SUCCESS;
}

輸出:

10; 9; 8; 7; 6; 5; 4; 3; 2; 1;

在 C++ 中使用 std::reverse 函式反轉陣列

另外,要想在不宣告其他變數的情況下將陣列元素原地反轉,我們可以呼叫標準庫中的 std::reverse 函式。std::reverse<algorithm> 標頭檔案的一部分,從 C++17 開始就成為標準庫的一部分。該函式將範圍內的 start/end 迭代器作為函式引數,並將元素就地交換。std::reverse 被呼叫的向量會被永久修改,隨後對其元素的任何訪問都會產生新的排序。

#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::reverse;
using std::vector;

void PrintVector(vector<int> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, "; "));
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  reverse(arr1.begin(), arr1.end());
  PrintVector(arr1);

  return EXIT_SUCCESS;
}

輸出:

10; 9; 8; 7; 6; 5; 4; 3; 2; 1;

在 C++ 中使用 rbegin/rend 迭代器來反轉陣列

與本主題的第一個例子相反,在一些用例中,不需要將向的重新排序的內容儲存在程式流中,而只是輸出到控制檯或顯示。下面的例子演示瞭如何在不修改底層變數內容的情況下,將陣列元素按相反順序列印到控制檯。

#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::vector;

void PrintVector(vector<int> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, "; "));
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  copy(arr1.rbegin(), arr1.rend(), ostream_iterator<int>(cout, "; "));
  cout << endl;

  return EXIT_SUCCESS;
}

輸出:

10; 9; 8; 7; 6; 5; 4; 3; 2; 1;
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Array