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

Jas*_*ine 4 c++ algorithm reverse stdlist c++11

例如,我试图找出如何反转,grades{1, 2, 3, 4, 5, 6}从第三个元素开始。

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

reverse(firstList.begin(), firstList.end());
Run Code Online (Sandbox Code Playgroud)

我希望它是相反的,以便列表变成:grades{1, 2, 6, 5, 4, 3}

JeJ*_*eJo 8

我知道我们无法通过列表来(grades.begin() + 2)获得职位,但是 [...]

你是对的。由于手段灵活list.begin() + pos,这样做的成本较低。迭代std::list器(即双向迭代器)不能有效地随机访问(即它是昂贵的)。因此,按照惯例,它必须是冗长的。

您需要明确地通过其元素进行迭代。这意味着,您可以利用std::nextfrom <iterator>header 来提供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());
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

现场演示