namespace std {
template <class BidirectionalIterator>
void reverse(BidirectionalIterator first,
BidirectionalIterator last); // (1) C++03
template <class BidirectionalIterator>
constexpr void reverse(BidirectionalIterator first,
BidirectionalIterator last); // (1) C++20
template <class ExecutionPolicy, class BidirectionalIterator>
void reverse(ExecutionPolicy&& exec,
BidirectionalIterator first,
BidirectionalIterator last); // (2) C++17
}
概要
要素の並びを逆にする。
要件
*first
は Swappable
でなければならない
効果
0 以上 (last - first) / 2
未満の整数 i
について、iter_swap(first + i, (last - i) - 1)
を行う
計算量
正確に (last - first) / 2
回 swap する
例
#include <algorithm>
#include <iostream>
#include <string>
int main() {
std::string str = "reverse";
std::reverse(str.begin(), str.end());
std::cout << str << std::endl;
}
xxxxxxxxxx
#include <algorithm>
#include <iostream>
#include <string>
int main() {
std::string str = "reverse";
std::reverse(str.begin(), str.end());
std::cout << str << std::endl;
}
出力
esrever
実装例
template <class BidirectionalIterator>
void reverse(BidirectionalIterator first, BidirectionalIterator last) {
for ( ; first != last && first != --last; ++first)
std::iter_swap(first, last);
}
参照
- LWG Issue 2039. Issues with
std::reverse
andstd::copy_if
- C++11まで、効果を「0 以上
(last - first) / 2
以下の整数i
について、」と記載していたが、これは間違いなので、C++14で「0 以上(last - first) / 2
未満の整数i
について、」と修正。
- C++11まで、効果を「0 以上
- P0879R0 Constexpr for
swap
andswap
related functions