STL的常用算法
概述:
算法主要是由头文件
三、排序算法
算法简介:
sort //对容器内元素进行排序
random_shuffle //洗牌 指定范围内元素随机调整顺序
merge //容器元素合并 并存储到另一容器中
reverse //反转指定范围内容器
1、random_shuffle(iterator beg,iterator end);
指定范围内的元素随机调整次序;算法实用,但使用时注意加随机数种子才能真正的随机打乱
void myPrint(int val){cout << val << " ";}void test01(){//加入随机数种子,使每次打乱顺序随机srand((unsigned int)time(NULL));vectorV1;V1.push_back(10);V1.push_back(20);V1.push_back(30);V1.push_back(40);V1.push_back(50);//原顺序for_each(V1.begin(), V1.end(), myPrint);//函数打印 myPrintcout << endl;//利用洗牌算法打乱顺序random_shuffle(V1.begin(), V1.end());//遍历打印输出for_each(V1.begin(), V1.end(), myPrint);//函数打印 myPrintcout << endl;}
2、merge
两个容器元素合并,并存储到另一容器中
注意两个容器必须是有序的
merge(iterator beg1,iterator end1, iterator beg2,iterator end2,iterator dest);
dest:目标容器迭代器的begin()
void myPrint(int val){cout << val << " ";}void test01(){//加入随机数种子,使每次打乱顺序随机srand((unsigned int)time(NULL));vectorV1;V1.push_back(10);V1.push_back(20);V1.push_back(30);V1.push_back(40);V1.push_back(50);//原顺序for_each(V1.begin(), V1.end(), myPrint);//函数打印 myPrintcout << endl;//利用洗牌算法打乱顺序random_shuffle(V1.begin(), V1.end());//遍历打印输出for_each(V1.begin(), V1.end(), myPrint);//函数打印 myPrintcout << endl;}
3、reverse(iterator beg,iterator end);
将指定范围内的元素反转
四、常用的拷贝和替换算法
copy
replace
replace_if
swap
1、copy(iterator beg,iterator end,iterator dest);
容器指定范围内的元素拷贝到另一容器中。
dest:目标起始迭代器
2、replace(iterator beg,iterator end,oldvalue,newvalue);
将容器内指定区间内旧元素替换成新元素 满足oldvalue的元素都被替换掉
void myPrint(int val){cout << val << " ";}class Print {public:void operator()(int val){cout << val << " ";}};void test04(){vectorV1;V1.push_back(10);V1.push_back(20);V1.push_back(30);V1.push_back(40);V1.push_back(50);//遍历 替换前for_each(V1.begin(), V1.end(), myPrint);//函数打印 myPrintcout << endl;replace(V1.begin(),V1.end(),30,3000);//30替换成3000for_each(V1.begin(), V1.end(), Print());//仿函数打印 Print()为匿名对象cout << endl;}
3、replace_if(iterator beg,iterator end,_pred,newvalue);
//按条件替换元素 满足条件的替换成指定元素
_pred为谓词
class Greater30 {public:bool operator()(int val){return val > 30;}};void test05(){vectorV1;V1.push_back(10);V1.push_back(20);V1.push_back(30);V1.push_back(40);V1.push_back(50);//遍历 替换前for_each(V1.begin(), V1.end(), myPrint);//函数打印 myPrintcout << endl;replace_if(V1.begin(), V1.end(), Greater30(), 3000);//将大于30的元素替换成3000 Greater30()匿名对象for_each(V1.begin(), V1.end(), Print());//仿函数打印 Print()为匿名对象cout << endl;}
replace_if按条件查找,可以利用仿函数灵活筛选满足的条件
4、swap
互换两个容器的元素
swap(container c1,container c2);
注意容器c1、c2需要满足相同结构类型
void test07(){vectorV1;V1.push_back(10);V1.push_back(20);V1.push_back(30);V1.push_back(40);V1.push_back(50);vectorV2;V2.push_back(15);V2.push_back(24);V2.push_back(37);V2.push_back(48);V2.push_back(59);V2.push_back(69);V2.push_back(79);V2.push_back(89);//遍历 交换前for_each(V1.begin(), V1.end(), myPrint);//函数打印 myPrintcout << endl;swap(V1, V2);//交换for_each(V1.begin(), V1.end(), Print());//仿函数打印 Print()为匿名对象cout << endl;}
下一篇:SpringMVC的执行流程