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



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

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

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

我想把它反过来,这样列表就变成:grades{1, 2, 6, 5, 4, 3}

我知道对于列表我们不能做(grades.begin() + 2)来获得位置,但是[…]

你是对的。提供list.begin() + pos的灵活性意味着这样做的成本很低。std::list迭代器(即BidirectionalIterator)不能有效地随机访问(即它是昂贵的)。因此,按照惯例,它必须是冗长的。

需要显式地遍历它的元素。这意味着,您可以使用<iterator>头文件中的std::next来为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());
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

现场演示

最新更新