📅  最后修改于: 2023-12-03 15:13:55.297000             🧑  作者: Mango
该函数的作用是将一个范围内的元素从后往前移动到另一个范围内。其语法如下:
template <class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 move_backward(BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 d_last);
其中,BidirectionalIterator1
和BidirectionalIterator2
是迭代器类型,first
和last
是待移动范围的起始和结束位置,d_last
是目标位置的结束位置(即移动后的范围的最后一个位置)。
需要注意的是,如果first
和d_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
中的元素顺序相反,符合预期。
在该示例程序中,from
和to
均为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()
函数非常方便,可以将一个范围内的元素从后往前移动到另一个范围内,非常实用。