GeezerVison is showing cpprefjp.github.io — std::move_backward - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
function template
<algorithm>
std:: move_backward (C++11)
namespace std {
template < class BidirectionalIterator1 , class BidirectionalIterator2 >
BidirectionalIterator2
move_backward ( BidirectionalIterator1 first ,
BidirectionalIterator1 last ,
BidirectionalIterator2 result ); // C++11
template < class BidirectionalIterator1 , class BidirectionalIterator2 >
constexpr BidirectionalIterator2
move_backward ( BidirectionalIterator1 first ,
BidirectionalIterator1 last ,
BidirectionalIterator2 result ); // C++20
}
概要
イテレータ範囲[first, last)の要素を出力イテレータ範囲に後ろからムーブする。
事前条件
result はイテレータ範囲(first,last] に含まれてはならない
効果
イテレータ範囲[first,last) 内にある要素を、それぞれ出力イテレータ範囲[result - (last-first),result) へムーブする。
ムーブは last - 1 から順番に行い、1 以上 last - first 以下であるそれぞれの n について、*(result - n) = std::move(*(last - n)) を行う。
戻り値
result - (last - first)
計算量
正確に last - first 回ムーブ代入が行われる。
備考
last が [result - (last-first),result) の範囲内にあるときには、move() の代わりに move_backward() を使うべきである。
例
#include <algorithm>
#include <iostream>
#include <vector>
#include <memory>
void print ( const std::unique_ptr < int >& v ) {
if ( v ) std::cout << * v << std::endl ;
else std::cout << "(null)" << std::endl ;
}
int main () {
std::vector < std::unique_ptr < int >> v ;
for ( int i = 0 ; i < 5 ; i ++ )
v.emplace_back ( new int ( i ));
// 0,1,2 の値がある範囲を、2,3,4 の値がある範囲へムーブする
std::move_backward ( v.begin() , v.begin() + 3 , v.end() );
// 以下のコードだと期待した結果にならないことを確認しよう。
// 移動元の後方と移動先の前方でイテレータ範囲が重なっている場合は、move_backwardを使わないといけない
// std::move (v.begin() , v.begin() + 3, v.begin() + 2);
std::for_each ( v.begin() , v.end() , & print );
}
出力
(null)
(null)
0
1
2
実装例
template < class BidirectionalIterator1 , class BidirectionalIterator2 >
BidirectionalIterator2 move_backward ( BidirectionalIterator1 first , BidirectionalIterator1 last ,
BidirectionalIterator2 result ) {
while ( first != last )
*-- result = move ( *-- last );
return result ;
}
バージョン
言語
処理系
関連項目
参照