我希望像在Python中一样在C ++中“包装”一个列表/向量。基本上我想将元素从列表末尾切换到列表的开头。我不想明确地制作新的清单。
在Python中,我可以编写类似的内容:
my_list = [1, 2, 3, 4, 5]
#[1, 2, 3, 4, 5]
q = collections.deque(my_list)
q.rotate(3)
#deque([3, 4, 5, 1, 2])
我在STL看了一下deque,但是我没有看到任何类似旋转的东西。似乎应该有一个简单的方法来使用迭代器或类似的东西。
答案 0 :(得分:11)
您正在寻找标准库中的std::rotate
,它提供了一种使用迭代器执行此操作的简便方法。
#include <algorithm>
std::vector<T> v /* = populate() */;
std::rotate(v.begin(), v.begin() + 3, v.end());
可以使用任何前向迭代器,因此这适用于大多数(序列)容器。
答案 1 :(得分:-2)
您可以使用
#include <algorithm>
std::reverse(my_list.begin(),my_list.end());
或使用
reverse_iterator rbegin();
在向量中向后循环。