需要將 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() 指向「前一個」位置,解引用屬於未定義行為。boost::adaptors::reversed 或自寫包裝器,或直接用傳統 for 循環。#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 提供零開銷的反向視圖,代碼更簡潔安全。