如何在给定位置反转 std::list?

How to reverse a std::list at a given position?

我正在尝试弄清楚如何反转,例如,grades{1, 2, 3, 4, 5, 6} 从第三个元素开始。

我知道对于列表我们无法 (grades.begin() + 2) 获得位置,但我不确定如何去做。 这是我到目前为止所拥有的,我只是颠倒了整个列表:

reverse(firstList.begin(), firstList.end());

我希望它反转,这样列表就变成了:grades{1, 2, 6, 5, 4, 3}

I know for lists we cannot do (grades.begin() + 2) to obtain the position, but [...]

你说得对。提供 list.begin() + pos 的灵​​活性意味着这样做很便宜。 std::list 迭代器(即 BidirectionalIterator)不能有效地随机访问(即它很昂贵)。所以,按照惯例,肯定是冗长的。

您需要明确地遍历它的元素。这意味着,您可以使用 std::next from <iterator> header to provide the starting point for std::reverse.

#include <iterator> // std::next
#include <algorithm> // std::reverse

std::list<int> grades{ 1, 2, 3, 4, 5, 6 };
std::reverse(std::next(grades.begin(), 2), grades.end());
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Live Demo