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交换容器时,注意交换的容器要同种类型