首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C++ std::reverse 算法詳解:反轉容器元素順序

     編輯:關於C語言

函數原型


#include 
template 
void reverse(BidirectionalIterator first, BidirectionalIterator last);

功能與參數

  • 功能:將範圍 [first, last) 內的元素順序反轉。
  • 參數:雙向迭代器 (支持 ++、--、解引用),如 vector、deque、list、數組指釖、string 迭代器。
  • 複雜度:線性,恰好執行 (last - first) / 2 次 swap。
  • 異常安全:若元素 swap 不拋出異常,則不拋出異常。

代碼示例


#include 
#include 
#include 
#include 

int main() {
    // 1. vector
    std::vector v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::reverse(v.begin(), v.end());
    // v = {9, 8, 7, 6, 5, 4, 3, 2, 1}

    // 2. 原生數組
    int arr[] = {10, 20, 30, 40};
    std::reverse(std::begin(arr), std::end(arr));
    // arr = {40, 30, 20, 10}

    // 3. string (原地反轉)
    std::string s = "hello";
    std::reverse(s.begin(), s.end());
    // s = "olleh"

    // 4. 部分反轉
    std::vector v2 = {1, 2, 3, 4, 5};
    std::reverse(v2.begin() + 1, v2.end() - 1);
    // v2 = {1, 4, 3, 2, 5}

    // 輸出驗證
    for (auto x : v) std::cout << x << ' '; std::cout << '\n';
    for (auto x : v2) std::cout << x << ' '; std::cout << '\n';
    std::cout << s << '\n';
    return 0;
}

相關算法

  • reverse_copy:將反轉結果複製到目標範圍,不修改源。
  • rotate:循環左移/右移範圍元素。
  • swap_ranges:交換兩個等長範圍的元素。

手寫實現參考 (教學用)


template 
void my_reverse(BidirIt first, BidirIt last) {
    while (first != last && first != --last) {
        std::swap(*first, *last);
        ++first;
    }
}

總結

std::reverse 是 STL 中最高效、最通用的原地反轉算法,適用於所有雙向可迭代容器。配合 reverse_copy 可實現非破壞性反轉。日常開發中優先使用標準庫算法,避免手寫循環出現邊界錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved