如何反转QList?
我看到qCopy和qCopybackward但似乎都没有让我以相反的顺序复制。
qCopybackward
只能以相反的顺序复制它,但保持darn元素的顺序相同!我想要做的就是以相反的顺序返回列表的副本。必须有一个功能,对吧?
没有找到相关结果
已邀请:
7 个回复
好按紊叉
只是
,所以至少它们是一致的。 回答你的问题:
编辑2015-07-21:显然(或者可能不是),如果你想要一个单行(并且人们似乎更喜欢那个,看看五年后不同答案的相对赞成)并且你有一个非
以上崩溃
但我觉得索引摆弄的东西更适合工作安全:)
摊揉售
蹦吃舷弦
邪罗逢确胃
一个QPad为1000万QTimers的ThinkPad W520我得到了这些数字: 倒车列表堆栈溢出耗时194毫秒 最大和大小的反向列表堆栈溢出需要136毫秒 提升的结果是 表达式(list.size()/ 2)在初始化循环时仅计算一次,而不是在每个步骤之后计算 swap()中的表达式list.size()仅在初始化循环时调用一次,而不是在每个步骤之后调用
嘘崇蔡对
然后
或者在C ++ 11中:
C ++标准库(以及通常的模板)的优点在于算法和容器是分开的。起初,标准容器(以及较小程度上的Qt容器)没有像
这样的便利功能似乎很烦人,但考虑其他选择:哪个更优雅:为所有容器提供
方法,或者定义标准所有允许双向迭代的容器的接口,并提供一个适用于支持双向迭代的所有容器的实现? 为了说明为什么这是一种优雅的方法,请考虑一些类似问题的答案: “你怎么扭转
?”:
“你怎么扭转
?”:
容器的部分怎么样? “你如何扭转
的前七个元素?”:即使
作者给了我们一个方便的
方法,他们可能也不会给我们这个功能,但这里是:
但它变得更好:因为迭代器接口与C指针语法相同,并且因为C ++ 11添加了免费的
和
函数,所以你可以这样做: “你如何扭转数组?26:”:
或者预先C ++ 11:
(那就是
为我们隐藏的丑陋。) 我们继续: “你如何扭转尺寸
的缓冲区
?”:
“你如何反转以null结尾的字符串
?”:
“你如何在一个大小为ѭ31的缓冲区中反转一个不一定为空的字符串
?”:
请注意,
使用
,所以即使这样也会尽可能地执行:
还要注意,这些都应该像手写循环一样执行,因为在可能的情况下,编译器会将这些转换为指针算法。此外,您无法干净地编写可重用,通用,高性能的
功能,如此C.
逝媳蘑贩茄
不幸的是,Qt没有返回反向迭代器的rbegin和rend函数(从容器的末尾到它的begnning)。您可以编写它们,或者您可以自己编写复制功能 - 反转列表是一个很好的例外。或者你可以注意到QList实际上是一个数组,是什么让编写这样一个函数变得微不足道。或者您可以将列表转换为std :: list,并使用rbegin和rend。选择你喜欢的任何东西
济畦刨