1、 inplace_merge()函数将两个连接在一起的排序序列[first, middle)和[middle, last)结合成单一序列并保持有序。inplace_merge()函数是stable操作。
2、 inplace_merge()版本一的源代码,只讨论了有暂时缓冲区的情况
template <class BidirectionalIterator>
inline void inplace_merge(BidirectionalIterator first,
BidirectionalIterator middle,
BidirectionalIterator last) {
//其中一个序列为空,什么也不做
if (first == middle || middle == last) return;
__inplace_merge_aux(first, middle, last, value_type(first),
distance_type(first));
}
//辅助函数
template <class BidirectionalIterator, class T, class Distance>
inline void __inplace_merge_aux(BidirectionalIterator first,
BidirectionalIterator middle,
BidirectionalIterator last, T*, Distance*) {
Distance len1 = 0;
distance(first, middle, len1);
Distance len2 = 0;
distance(middle, last, len2);
//会使用额外的内存空间
temporary_buffer<BidirectionalIterator, T> buf(first, last);
if (buf.begin() == 0)//内存配置失败
__merge_without_buffer(first, middle,

本文详细探讨了STL中inplace_merge()函数的作用,它用于合并两个已排序的序列并保持有序状态。通过分析不同情况,如缓冲区足够或不足时的处理,以及使用图解说明了序列合并过程中的旋转、递归调用等关键步骤,全面揭示了该算法的工作原理。
最低0.47元/天 解锁文章
1091

被折叠的 条评论
为什么被折叠?



