#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 可實現非破壞性反轉。日常開發中優先使用標準庫算法,避免手寫循環出現邊界錯誤。