C++-STL学习——STL-algorithm

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C++STL学习——STL_algorithm今天我们来讲讲STL中比较大的一个库algorithm.主要是一些算法的运算的实现,示例代码上传至。在使用STL中的algorithm之前,需要导入头文件#includealgorithm.(1)max(),min()[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片voidMaxAndMin(){intmaxI=3;intmaxJ=4;cout较大值为:max(maxI,maxJ)endl;cout较小值为:min(maxI,maxJ)endl;}max和min就是取两个数中的最大值与最小值。(2)由于下面有些方法的示例需要打印vector,所以我在这里先实现vector的打印算法[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片voidPrintVector(vectorintv){vectorint::iteratorvIterator;for(vIterator=v.begin();vIterator!=v.end();vIterator++){cout*vIterator;}coutendl;}这里使用迭代器来访问vector,并按顺序打印结果。(3)sort(),reverse()[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片voidSortAndReverse(){vectorintmyVector;myVector.push_back(2);myVector.push_back(9);myVector.push_back(1);myVector.push_back(0);myVector.push_back(7);cout排序前的序列:;PrintVector(myVector);sort(myVector.begin(),myVector.end());cout升序排序后的序列:;PrintVector(myVector);reverse(myVector.begin(),myVector.end());cout降序排序后的序列:;PrintVector(myVector);}sort是升序排序函数,reverse是降序排序函数。vector本身自己也有sort可以直接调用。(4)find()[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片voidFindVector(){vectorintmyVector;myVector.push_back(2);myVector.push_back(4);myVector.push_back(6);myVector.push_back(8);myVector.push_back(0);vectorint::iteratorvIterator;vIterator=find(myVector.begin(),myVector.end(),6);if(vIterator==myVector.end()){cout未找到endl;}else{cout找到:*vIteratorendl;}}find函数使用迭代器来进行查找某个数,如果到达end位置还没有找到,则表示没有这个数。迭代器会在第一次出现该数字时返回。(5)equal()[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片voidEqualVector(){vectorintmyVector1;myVector1.push_back(1);myVector1.push_back(5);myVector1.push_back(7);myVector1.push_back(9);vectorintmyVector2;myVector2.push_back(1);myVector2.push_back(5);myVector2.push_back(7);myVector2.push_back(9);boolisEqual=equal(myVector1.begin(),myVector1.end(),myVector2.begin());if(isEqual){cout相等endl;}else{cout不相等endl;}}equal()可以判断两个vector是否相等,equal会根据每一个位置去进行比较。(6)merge()[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片voidMergeVector(){vectorintmyVector1;myVector1.push_back(1);myVector1.push_back(5);myVector1.push_back(7);myVector1.push_back(9);vectorintmyVector2;myVector2.push_back(2);myVector2.push_back(3);myVector2.push_back(4);myVector2.push_back(5);//需要在合并前排序sort(myVector1.begin(),myVector1.end());sort(myVector2.begin(),myVector2.end());//需要指定结果集的大小vectorintmyResult(8);merge(myVector1.begin(),myVector1.end(),myVector2.begin(),myVector2.end(),myResult.begin());cout合并后的序列为:;PrintVector(myResult);}merge可以实现两个有序vector的合并,合并后的vector依然是有序的。合并后的vector放到新的结果集中,需要事先指定其大小。(7)swap()[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片voidSwapObject(){inti=2;intj=3;cout交换之前两个数的值:;couti=i;j=jendl;swap(i,j);cout交换之后两个数的值:;couti=i;j=jendl;}swap可以用来交换两个数。(8)unique[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片//去重的操作:sort--unique--erase//vector可以由数组进行初始化voidUniqueVector(){intarray[]={5,3,1,3,2,5};vectorintvectorFromArray(array,array+sizeof(array)/sizeof(int));sort(vectorFromArray.begin(),vectorFromArray.end());vectorint::iteratoriter=unique(vectorFromArray.begin(),vectorFromArray.end());vectorFromArray.erase(iter,vectorFromArray.end());cout去重之后的序列:;PrintVector(vectorFromArray);}由代码中可以看到,vector并不一定需要通过push_back来创建,而是可以通过array初始化。这里的去重有一个缺点,就是需要先进行排序,也就是会改变原先vector的结构。(9)replace()[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片voidReplaceVector(){intarray[]={2,4,6,8,9};vectorintmyVector(array,array+sizeof(array)/sizeof(int));cout替换之前的序列:;PrintVector(myVector);replace(myVector.begin(),myVector.end(),8,888);cout替换之后的序列:;PrintVector(myVector);}replace会查找原先序列中是否有某个数,若存在,则会进行替换。(10)remove()[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片//删除操作和去重操作是类似的,实际使用remove的时候,并没有删除那个元素,而是用后面的那个//元素替代了想要删除的元素。最后要使用erase方法删除。//但是只能删除第一次出现的那个数字,而第二个元素不可删除。voidRemoveVector(){intarray[]={1,2,3,4,5};vectorintmyVector(array,array+sizeof(array)/sizeof(int));cout删除元素前的序列:;PrintVector(myVector);vectorint::iteratorIter=remove(myVector.begin(),myVector.end(),4);myVector.erase(Iter);cout删除元素前的序列:;PrintVector(myVector);}删除vector中的某个元素,首先使用迭代器来进行定位,然后使用erase进行擦除。注意,只能删除第一次出现的该数字,第二次出现的该数组则不能被删除。(11)for-each()[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片//遍历序列中的每个元素,然后去执行某个方法voidForEach(){intarray[]={3,5,7,9,1};vectorintmyVector(array,array+sizeof(array)/sizeof(int));coutfor-each之前的序列:;PrintVector(myVector);for_each(myVector.begin(),myVector.end(),PrintElement);coutfor-each之后的序列:;PrintVector(myVector);}//传引用,就可以改变原序列voidPrintElement(int&ele){ele=ele*ele;}for-each是对序列中的每个元素进行快速遍历,然后在遍历过程中对每个元素执行一定的操作,示例代码中是对每个元素求平方,这样就可以改变原序列。(12)count()[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片voidCountVector(){intarray[]={4,4,6,9,0,0,0};vectorintmyVector(array,array+sizeof(array)/sizeof(int));//这里默认返回的是longlongnum=count(myVector.begin(),myVector.end(),0);cout某个值出现的次数为:numendl;}count用于计算某个值出现的次数。(13)copy()[cpp]viewplaincopyprint?在CODE上查看代码片派生到我的代码片voidCopyVector(){intarr[]={2,3,4,5,6};vectorintmyVector(arr,arr+sizeof(arr)/sizeof(int));//这里需要指定大小vectorintmyVectorCo

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功