首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 反向迭代器遍歷 vector 完整示例:從尾到頭輸出元素

     編輯:程式設計疑難解答

問題背景

需要將 vector<double> 中的元素按逆序輸出,即從最後一個元素遍歷到第一個。

核心代碼

#include <iostream>
#include <vector>

int main() {
    std::vector<double> vec_num = {1.1, 1.5, 1.2}; // C++11 列表初始化
    
    // 反向迭代器:rbegin() 指向最後一個元素,rend() 指向第一個元素之前
    for (auto re_it = vec_num.rbegin(); re_it != vec_num.rend(); ++re_it) {
        std::cout << *re_it << std::endl;
    }
    
    // 輸出結果:
    // 1.2
    // 1.5
    // 1.1
    
    return 0;
}

關鍵點解析

概念說明
reverse_iterator反向迭代器類型,++ 操作實際向前移動(向容器開頭方向)
rbegin()返回指向 最後一個元素 的反向迭代器(等價於 end() - 1)
rend()返回指向 第一個元素之前 的反向迭代器(等價於 begin() - 1)
遍歷條件re_it != vec_num.rend(),當到達 rend 停止(不包含 rend 指向的位置)

常見誤區與避坑指南

  • 不要用 --re_it:反向迭代器的 ++ 已經是向前移動,用 -- 會反向導致死循環或越界。
  • 不可解引用 rend():rend() 指向「前一個」位置,解引用屬於未定義行為。
  • C++11 範圍 for 不直接支持反向:需借助 boost::adaptors::reversed 或自寫包裝器,或直接用傳統 for 循環。

現代化替代寫法(C++20)

#include <ranges>
#include <vector>
#include <iostream>

int main() {
    std::vector<double> vec = {1.1, 1.5, 1.2};
    for (auto val : vec | std::views::reverse) {
        std::cout << val << '\n';
    }
}

std::views::reverse 提供零開銷的反向視圖,代碼更簡潔安全。

應用場景延伸

  • 棧/後進先出邏輯處理
  • 歷史記錄倒序展示
  • 算法中需從尾部開始處理(如某些 DP、貪心策略)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved