有没有一个函数可以在一个切片中交换两个不同大小的范围?

Is there a function which swaps two ranges of different sizes within a slice?

提问人:INEEDANSWERS 提问时间:2/10/2022 最后编辑:HerohtarINEEDANSWERS 更新时间:2/10/2022 访问量:78

问:

交换相同大小的范围已经可以用 完成。但是,Vec/slice/etc 中不同大小的范围呢?这样的功能存在吗?std::ptr::swap_nonoverlapping

例如:

let mut vector = vec![1, 2, 3, 4, 5, 6, 7, 8, 9];
function_Im_looking_for(&mut vector, 1..=2, 4..=6);
assert_eq(vector, [1, 5, 6, 7, 4, 2, 3, 8, 9]);
                      _______     ____
指针 内存 切片 交换

评论

1赞 Herohtar 2/10/2022
绝对没有内置的东西。您所描述的实际上并不是“交换”——在“交换”其他项目之前,必须将索引处的数字移动到索引中。34
0赞 INEEDANSWERS 2/10/2022
这真是太可惜了。我可以自己实现一个,但它可能不是最优化的版本。@Herohtar
6赞 mcarton 2/10/2022
在信封的背面快速涂鸦,这似乎相当于交换最小的公共范围,加上旋转其余的范围?

答: 暂无答案