【STL源码剖析读书笔记】【第6章】算法之inplace_merge算法

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值