环绕C++;Python中的类向量 我想在Python中用C++来“环绕”列表/向量。基本上我想把元素从列表的末尾转移到列表的开头。我不想明确地列出一个新的清单
在Python中,我可以编写如下内容:环绕C++;Python中的类向量 我想在Python中用C++来“环绕”列表/向量。基本上我想把元素从列表的末尾转移到列表的开头。我不想明确地列出一个新的清单,c++,python,list,iterator,C++,Python,List,Iterator,在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,但没有看到任何类似于rotate的内容。似乎应该有一种简单的方法来使用迭代器或类似的东西来实现这一点。您正在从标准库中寻找,该库提供了一种使用迭代器实现这一点的简单方法 #include <algor
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,但没有看到任何类似于rotate的内容。似乎应该有一种简单的方法来使用迭代器或类似的东西来实现这一点。您正在从标准库中寻找,该库提供了一种使用迭代器实现这一点的简单方法
#include <algorithm>
std::vector<T> v /* = populate() */;
std::rotate(v.begin(), v.begin() + 3, v.end());
#包括
std::vector v/*=populate()*/;
旋转(v.begin(),v.begin()+3,v.end());
可以使用任何前向迭代器,因此这适用于大多数(序列)容器。您可以使用
#include <algorithm>
std::reverse(my_list.begin(),my_list.end());
在向量中向后循环。还请注意,根据相对于容器长度旋转的元素数量,
deque
甚至list
的性能可能会(显著)更好。@MarkB:如何?似乎rotate
是通过swap
在每个元素的基础上实现的,而无需更改基础容器…?Woops,您将无法使用rotate
,并且在list
的情况下,必须使用弹出/推送功能或splice
手动实现。考虑到这一点,我确信这是一个过早的优化。@MarkB:好吧,你不能使用+3
,但你应该说std::next(v.begin(),3)
,事实上,一旦你有了迭代器,最好做一个拼接
@KerreckSB那么计算复杂度O(n)是多少,其中n是要交换的元素数?
reverse_iterator rbegin();