std::copy_backward
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <algorithm> で定義
|
||
template< class BidirIt1, class BidirIt2 > BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last ); |
(C++20未満) | |
template< class BidirIt1, class BidirIt2 > constexpr BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last ); |
(C++20以上) | |
[first, last) で定義される範囲の要素を d_last で終わる別の範囲にコピーします。 要素は逆順に (最後の要素が最初に) コピーされますが、それらの相対順序は維持されます。
d_last が (first, last] 内の場合、動作は未定義です。 その場合は std::copy_backward の代わりに std::copy を使用しなければなりません。
引数
| first, last | - | コピーする要素の範囲 |
| d_last | - | コピー先範囲の終端 |
| 型の要件 | ||
-BidirIt は LegacyBidirectionalIterator の要件を満たさなければなりません。
| ||
戻り値
最後にコピーした要素を指すイテレータ。
計算量
ちょうど last - first 回の代入。
ノート
オーバーラップする範囲をコピーする場合、左にコピーする (コピー先範囲の先頭がコピー元範囲の外側である) ときは std::copy が適切であり、右にコピーする (コピー先範囲の終端がコピー元範囲の外側である) ときは std::copy_backward が適切です。
実装例
template< class BidirIt1, class BidirIt2 >
BidirIt2 copy_backward(BidirIt1 first, BidirIt1 last, BidirIt2 d_last)
{
while (first != last) {
*(--d_last) = *(--last);
}
return d_last;
}
|
例
Run this code
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> from_vector;
for (int i = 0; i < 10; i++) {
from_vector.push_back(i);
}
std::vector<int> to_vector(15);
std::copy_backward(from_vector.begin(), from_vector.end(), to_vector.end());
std::cout << "to_vector contains: ";
for (auto i: to_vector) {
std::cout << i << " ";
}
}
出力:
to_vector contains: 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
関連項目
(C++11) |
指定範囲の要素を新しい位置にコピーします (関数テンプレート) |