Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
环绕C++;Python中的类向量 我想在Python中用C++来“环绕”列表/向量。基本上我想把元素从列表的末尾转移到列表的开头。我不想明确地列出一个新的清单_C++_Python_List_Iterator - Fatal编程技术网

环绕C++;Python中的类向量 我想在Python中用C++来“环绕”列表/向量。基本上我想把元素从列表的末尾转移到列表的开头。我不想明确地列出一个新的清单

环绕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

在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 <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();