📜  C++ STL-algorithm.move_backward()函数(1)

📅  最后修改于: 2023-12-03 15:13:55.297000             🧑  作者: Mango

C++ STL-algorithm.move_backward()函数

该函数的作用是将一个范围内的元素从后往前移动到另一个范围内。其语法如下:

template <class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 move_backward(BidirectionalIterator1 first,
                                      BidirectionalIterator1 last,
                                      BidirectionalIterator2 d_last);

其中,BidirectionalIterator1BidirectionalIterator2是迭代器类型,firstlast是待移动范围的起始和结束位置,d_last是目标位置的结束位置(即移动后的范围的最后一个位置)。

需要注意的是,如果firstd_last之间存在交叉,则该函数的行为是未定义的。

下面是一个示例程序,演示了该函数的基本用法:

#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
    std::vector<int> from = {1, 2, 3, 4, 5};
    std::vector<int> to(5);
    std::move_backward(from.begin(), from.end(), to.end());
    for (int i : to) {
        std::cout << i << " ";
    }
    std::cout << std::endl;
    return 0;
}

该程序将from中的元素从后往前移动到to中。输出结果为:

5 4 3 2 1

可以看到,to中的元素顺序与from中的元素顺序相反,符合预期。

在该示例程序中,fromto均为std::vector类型,因此使用了迭代器作为参数。然而,该函数可以接受任何迭代器类型,包括指针。下面是一个使用指针的示例程序:

#include <iostream>
#include <algorithm>

int main()
{
    int from[] = {1, 2, 3, 4, 5};
    int to[5];
    std::move_backward(from, from+5, to+5);
    for (int i : to) {
        std::cout << i << " ";
    }
    std::cout << std::endl;
    return 0;
}

该程序与前面的示例程序实现了相同的功能,输出结果也相同。

如果需要将元素移动到与原范围重叠的位置,则可以使用std::copy_backward()函数。

#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
    std::vector<int> v = {1, 2, 3, 4, 5};
    std::move_backward(v.begin()+2, v.end(), v.end()-2);
    for (int i : v) {
        std::cout << i << " ";
    }
    std::cout << std::endl;
    return 0;
}

该程序将v中的元素从下标2开始移动到下标3和4的位置,输出结果为:

1 2 3 3 4

可以看到,元素3被移动到了新位置,而原来的元素3和4被覆盖掉了。

总之,std::move_backward()函数非常方便,可以将一个范围内的元素从后往前移动到另一个范围内,非常实用。