- algorithm[meta header]
- std[meta namespace]
- function template[meta id-type]
namespace std {
template <class BidirectionalIterator, class OutputIterator>
OutputIterator
reverse_copy(BidirectionalIterator first,
BidirectionalIterator last,
OutputIterator result); // (1) C++03
template <class BidirectionalIterator, class OutputIterator>
constexpr OutputIterator
reverse_copy(BidirectionalIterator first,
BidirectionalIterator last,
OutputIterator result); // (1) C++20
template <class ExecutionPolicy, class BidirectionalIterator, class ForwardIterator>
ForwardIterator
reverse_copy(ExecutionPolicy&& exec,
BidirectionalIterator first,
BidirectionalIterator last,
ForwardIterator result); // (2) C++17
}
イテレータ範囲[first, last)
の要素順を逆にし、その結果を出力の範囲へコピーする。
[first,last)
と[result,result+(last-first))
は領域が重なっていてはならない
0 以上 last - first
未満の整数 i
について、*(result + (last - first) -1 - i) = *(first + i)
を行うことで、[first,last)
の範囲を [result,result+(last-first))
へコピーする。
result + (last - first)
正確に last - first
回代入する
#include <algorithm>
#include <iostream>
#include <string>
#include <iterator>
int main() {
std::string str = "reverse";
std::reverse_copy(str.begin(), str.end(),
std::ostream_iterator<char>(std::cout, ""));
}
- std::reverse_copy[color ff0000]
- str.begin()[link /reference/string/basic_string/begin.md]
- str.end()[link /reference/string/basic_string/end.md]
esrever
template <class BidirectionalIterator, class OutputIterator>
OutputIterator reverse_copy(BidirectionalIterator first,
BidirectionalIterator last,
OutputIterator result) {
while (first != last)
*result++ = *--last;
return result;
}