为什么STL逆向算法没有像我预期的那样工作?

Why does the STL reverse algorithm not work as I expect?

尝试反转向量的一部分:

vector<int> nums{1,2,3};
std::reverse(nums.begin(), nums.end()); //LINE1
std::reverse(nums.begin(), (nums.begin() + 1)); //LINE2
std::reverse((nums.begin() + 2), nums.end()); //LINE3

LINE1 之后,nums{3,2,1}

LINE2和LINE3之后,没有变化。

预期:nums{2,3,1}

来自documentation for std::reverse

Reverse range

Reverses the order of the elements in the range [first,last).

注意半开范围。

因此,假设您有三个元素(范围 [0;2]):

1) std::reverse(nums.begin(), (nums.begin() + 1));

这在范围[0; 0+1) -> [0; 1) -> [0;0](这是一个开放范围,因此不包括闭合边界本身)。

2) std::reverse((nums.begin() + 2), nums.end());

在这里,关于范围 reverse 操作,无论如何你都弄错了。 begin() + 2 表示您案例中的最后一个元素,而 end() 是...结束。所以这一行没有意义,什么也不做。