【发布时间】:2012-05-27 11:09:56
【问题描述】:
我有std::list 例如。带整数:9 10 8 25 70 75 30 14 80
我想在some_position_number 元素之后移动小于10 的所有元素,例如。 = 5。移动对象的初始顺序很重要,必须与移动后的初始顺序相同。
换句话说,最后需要接收some_position_number元素false和true之后的元素
就像第一个例子一样:10 25 70 75 30 9 *8* 14 80
第二个首字母:9 3 8 25 70 75 30 14 80
第二个结果:10 25 70 75 30 9 *3* 8 14 80
第三个首字母:25 70 75 30 14 9 3 8 80
第三个结果:25 70 75 30 14 9 3 8 80(开头已经是5)
4 首字母:3 4 1 2 3 9 3 8 80
4 结果:9 3 8 80 3 4 1 2 3(类似这样)似乎在这里some_position_number 必须用作阈值或80 3 4 1 2 3 9 3 8 也接受,但似乎需要检查 end() 和无限循环?
如何做到这一点最有效,也许不需要额外的list 以避免不必要的对象创建和擦除?因为在真正的应用程序中,std::list 没有整数,而是对象。也许 std::splice?以某种方式选择需要移动的对象,而不是找到新位置并将每个元素 std::splice 到它。
【问题讨论】:
-
list::splice可以帮助移动列表节点而无需销毁和重新创建。 -
谢谢,是的,我知道,并且已经添加了这个标签,但是我的尝试是错误的。我在拼接迭代器以及当它们去
invalid时对迭代器感到困惑。以及如何选择 9 和 8 来计算没有它们的新位置...已经在上一个问题中发布了我的 attemts 代码,但它增加了混乱,我将其删除并创建新的。