std::move_backward_C++中文网

定义于头文件 <algorithm>

template< class BidirIt1, class BidirIt2 >
BidirIt2 move_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );

(C++11 起)
(C++20 前)

template< class BidirIt1, class BidirIt2 >
constexpr BidirIt2 move_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );

(C++20 起)

移动来自范围 [first, last) 的元素到终于 d_last 的另一范围。以逆序移动元素(首先复制末元素),但保持其相对顺序。

d_last(first, last] 内则行为未定义。该情况下必须用 std::move 代替 std::move_backward

参数

first, last - 要移动的元素范围
d_last - 目标范围结尾
类型要求
-BidirIt1, BidirIt2 必须满足遗留双向迭代器 (LegacyBidirectionalIterator) 的要求。

返回值

目标范围中的迭代器,指向最后移动的元素。

复杂度

准确移动赋值 last - first 次。

可能的实现

template< class BidirIt1, class BidirIt2 >
BidirIt2 move_backward(BidirIt1 first,
                                     BidirIt1 last,
                                     BidirIt2 d_last)
{
    while (first != last) {
        *(--d_last) = std::move(*(--last));
    }
    return d_last;
}

注意

移动重叠的范围时, std::move 在移动到左侧(目标范围的起始在源范围外)时适合,而 std::move_backward 在移动到右侧(目标范围的结尾在源范围外)时适合。

示例

输出:

src: foo bar baz 
dest:    
src:    
dest: foo bar baz

参阅

将某一范围的元素移动到一个新的位置
(函数模板)