我正试图找出如何逆转,例如,从第三个元素开始的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());
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
现场演示