尝试反转矢量的一部分:
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}
答案 0 :(得分:4)
来自documentation for std::reverse
:
反向范围
撤消 [first,last> 范围内元素的顺序。
注意半开范围。
所以,假设你有三个元素(范围[0; 2]):
1) std::reverse(nums.begin(), (nums.begin() + 1));
这在范围[0; 0 + 1) - &gt; [0; 1) - &gt; [0; 0](它是一个开放范围,因此结束边界本身不包括在内)。
2) std::reverse((nums.begin() + 2), nums.end());
在这里,无论如何,关于范围reverse
进行操作,你都错了。 begin() + 2
表示您案例中的最后一个元素,而end()
表示...结尾。所以这条线毫无意义,什么都不做。