C++ 笔记 22 (STL常用算法 - 排序 & 拷贝 & 替换)

五. STL-常用算法

3. 常用排序算法

sort  //对容器内元素进行排序
random_shuffle  //洗牌,指定范围内的元素随机调整次序
merge   //容器元素合并,并储存到另一容器中
reverse  //反转指定范围的元素
3.1 sort

功能:对容器内元素进行排序
原型:

sort(iterator beg, iterator end, _Pred);

示例:

//sort默认从小到大排序
sort(v.begin(),v.end());

//从大到小排序
sort(v.begin(),v.end(),greater<int>());

总结:sort属于开发中常用的算法之一,需熟练掌握

3.2 random_shuffle

功能:洗牌,指定范围内的元素随机调整次序
原型:

random_shuffle(iterator beg, iterator end);

srand((unsigned int)time(NULL));
random_shuffle(v.begin(),v.end());

总结:random_shuffle洗牌算法比较实用,使用时记得加随机数种子

3.3 merge

功能:两个容器元素合并,并存储到另一容器中
原型:

merge(iterator beg1, iterator end1,iterator beg2, 
				iterator end2, 	iterator dest)
//注意,两个容器必须是有序的

示例:

//目标容器需要提前开辟空间
vtarget.resize(v1.size() + v2.size());

//合并,需要两个有序序列
merge(v1.begin(),v1.end(),v2.begin(),v2.end(),vtarget.begin());

总结:merge合并的两个容器必须是有序序列

3.4 reverse

功能:将容器内元素进行反转
原型:

reverse(iterator beg, iterator end);
//反转指定范围元素

reverse(v.begin(), v.end());

总结:reverse反转区间内元素

4. 常用拷贝和替换算法

copy  //容器内指定范围的元素拷贝到另一容器中
replace  //将容器内指定范围的旧元素修改为新元素
replace_if  //容器内指定范围满足条件的元素替换为新元素、
swap  //互换两个容器的元素
4.1 copy

功能:容器内指定范围的元素拷贝到另一容器中
原型:

copy(iterator beg, iterator end, iterator dest);
//iterator dest 为目标起始迭代器

v2.resize(v1.size());
copy(v1.begin(),v1.end(),v2.begin());

总结:利用copy算法在拷贝时,目标容器记得提前开辟空间

4.2 replace

功能:将容器内指定范围的旧元素修改为新元素
原型:

replace(iterator beg, iterator end, oldvalue, newvalue);

replace(v.begin(),v.end(),20,200);
//将容器中的20替换成2000
4.3 replace_if

功能:将区间内满足条件的元素,替换成指定元素
原型:

replace_if(iterator beg, iterator end, _pred, newvalue);

示例:

class ReplaceGreater30
{
	public:
	bool operator()(int val)
	{
		return val >=30;
	}
};

//将容器中大于等于30的替换成3000
replace_if(v.begin(),v.end(),ReplaceGreator30(),3000);

总结:replace_if按条件查找,可以利用仿函数灵活筛选满足的条件

4.4 swap

功能:互换两个容器的元素
原型:

swap(container c1 , container c2);

swap(v1,v2);

总结:swap交换容器时,注意交换的容器要同种类型