如何在给定位置反转 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());
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我正在尝试弄清楚如何反转,例如,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());
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^