stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)
算法:用来处理群集内的元素。它们可以出于不同的目的而搜寻,排序,修改,使用那些元素。是一种应用在容器上以各种方法处理其内存的行为或功能,如sort(排序),copy(拷贝)…
算法由模板函数体现,这些函数不是容器类的成员函数,是独立的函数,它们可以用于STL容器,也可以用于普通的C++数组等.
头文件:#include<algorithm>
在STL的泛型算法中有4类基本的算法:
1)变序型队列算法: 可以改变容器内的数据;
2)非变序型队列算法:处理容器内的数据而不改变他们;
3)排序值算法:包涵对容器中的值进行排序和合并的算法,还有二叉搜索算法 ,
4)通用数值算法:此种算法不多,涉及到专业领域中有用的算术操作,独立包涵于头文件<numeric>中。
STL的算法并不只是针对STL容器,对一般容器也是适用的。
// 变序型队列算法
#include <iostream>
#include <algorithm>
#include <iterator>
//下面用到了输出迭代器ostream_iterator
using namespace std;
int main(void)
{ int arr0[6]= {1,12,3,2,1215,90};
int arr1[7];
int arr2[6]= {2,5,6,9,0,-56};
//将数组aar复制到arr1
copy(arr0,(arr0+6),arr1);
cout<<"arr0[6] copy to arr1[7],now arr1: "<<endl;
for(int i=0; i<7; i++)
cout<<" "<<arr1[i];
//最后一个数组元素未赋值,因此输出内容为一随机数
//将排好序的arr翻转
reverse(arr0,arr0+6);
cout<<"\n"<<"arr reversed ,now arr:"<<endl;
//复制到输出迭代器
copy(arr0,arr0+6,ostream_iterator<int>(cout, " "));
//交换arr0和arr2序列
swap_ranges(arr0,arr0+6,arr2);
cout<<"\n"<<"arr0 swaped to arr2, and now arr0's content:"<<endl;
copy(arr0,arr0+6,ostream_iterator<int>(cout, " "));
cout<<"\n"<<"arr2:"<<endl;
copy(arr2,arr2+6,ostream_iterator<int>(cout, " "));
return 0;
}
非变序型队列算法(成员统计计算,搜索匹配)
// 非变序型队列算法
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void)
{ int a[10]= {12,31,5,2,23,121,0,89,34,66};
vector<int> v1(a,a+10);
vector<int>::iterator result1,result2; //result1和result2是随机访问迭代器
result1=find(v1.begin(),v1.end(),2); //在v1中找到2,result1指向v1中的2
result2=find(v1.begin(),v1.end(),8); //在v1中没有找到8,result2指向的是v1.end()
cout<<result1-v1.begin()<<endl; //3-0=3或4-1=3,屏幕结果是3
cout<<result2-v1.end()<<endl; //10-10=0;
int b[9]= {5,2,23,54,5,5,5,2,2};
cout<<"a[10]={12,31,5,2,23,121,0,89,34,66};\n";
cout<<"b[9]={5,2,23,54,5,5,5,2,2};\n";
vector<int> v2(a+2,a+8);
vector<int> v3(b,b+4);
result1=search(v1.begin(),v1.end(),v2.begin(),v2.end());
cout<<*result1<<endl;
//在v1中找到了序列v2,result1指向v2在v1中开始的位置
result1=search(v1.begin(),v1.end(),v3.begin(),v3.end());
cout<<*(result1-1)<<endl;
//在v1中没有找到序列v3,result指向v1.end(),屏幕打印出v1的最后一个元素66
vector<int> v4(b,b+9);
int i=count(v4.begin(),v4.end(),5);
int j=count(v4.begin(),v4.end(),2);
cout<<"there are "<<i<<" members in v4 equel to 5"<<endl;
cout<<"there are "<<j<<" members in v4 equel to 2"<<endl;
//计算v4中有多少个成员等于 5,2
return 0;
}
排序算法
//排序值算法
#include <iostream>
#include <algorithm>
using namespace std;
int main(void)
{ int a[10]= {12,0,5,3,6,8,9,34,32,18};
int b[5]= {5,3,6,8,9};
int d[15];
sort(a,a+10);
cout<<"Sorted a[10]:";
for(int i=0; i<10; i++)
cout<<a[i]<<" ";
sort(b,b+5); // 3 5 6 8 8
if(includes(a,a+10,b,b+5)) //一个数组是否包含另外一个数组
cout<<"\n"<<"sorted b members are included in a."<<endl;
else
cout<<"sorted a dosn`t contain sorted b!";
merge(a,a+10,b,b+5,d); //合并
cout<<"a[10]={12,0,5,3,6,8,9,34,32,18};\n";
cout<<"b[5]={5,3,6,8,9};\n";
cout<<"merge(a,a+10,b,b+5,d);\n ";
cout<<"then d[15]:\n";
for(int j=0; j<15; j++)
cout<<d[j]<<" ";
return 0;
}
相关文章
- vector是表示可以改变大小的数组的序列容器,本文主要介绍了C++STL标准库std::vector的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2022-03-06
- 作者:Sabine 【导读】本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序 冒泡排序 using System; namespace BubbleSorter { public class Bubb...2020-06-25
图文详解Heap Sort堆排序算法及JavaScript的代码实现
这篇文章以图文详解Heap Sort堆排序算法及JavaScript的代码实现,堆排序算法基于类二叉树的堆数据结构,需要的朋友可以参考下...2016-05-05- 这篇文章主要为大家详细介绍了C/C++实现八大排序算法汇总,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- 这篇文章主要介绍了zlib库压缩和解压字符串STL string的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C++ STL中的容器适配器实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-20
- 这篇文章主要介绍了C语言演示对归并排序算法的优化实现,归并排序的最差时间复杂度为(n\log n),最优时间复杂为(n),存在可以改进的空间,需要的朋友可以参考下...2020-04-25
- 冒泡排序和快速排序算法在开发应用中各有优点了,下面我们来看几个关于php排序的几个例子。 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组。 使用PHP描...2016-11-25
- <STL 源码剖析>将其描述为空间配置器,理由是allocator可以将其它存储介质(例如硬盘)做为stl 容器的存储空间。由于内存是allocator管理的主要部分,因此,本文以STL内存管理为出发点介绍allocator...2020-04-25
- 这篇文章主要为大家详细介绍了C++排序算法之插入排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)
这篇文章主要介绍了stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列),需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了堆排序算法(选择排序改进),有需要的朋友可以参考一下...2020-04-25
- function quickSort(&$data, $beg, $end) 02 { 03 if ($end > $beg) { 04 $piv = $data[$beg]; 05 $k = $beg + 1; 06 $r = $end; 07 while ($k < $r) { 08 if...2016-11-25
stl容器set,map,vector之erase用法与返回值详细解析
在使用 list、set 或 map遍历删除某些元素时可以这样使用,如下所示...2020-04-25- 这篇文章主要介绍了一些常用排序算法整理,插入排序算法、直接插入排序、希尔排序、选择排序、冒泡排序等排序,需要的朋友可以参考下...2020-04-25
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
小编推荐的这篇文章介绍了PHP常用排序算法实例小结,基本排序,冒泡排序,快速排序,插入排序,非常实用,有兴趣的同学快来看看吧。 代码如下复制代码classbevin{public$pub...2017-07-06- 关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序...2020-04-25
- 这篇文章主要介绍了Java排序算法三之归并排序的递归与非递归的实现示例解析,文章通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-05
- 这篇文章主要介绍了php排序算法,结合实例形式分析了php数据查询、排序、数组去重、遍历与排序的相关操作技巧与注意事项,需要的朋友可以参考下...2016-10-20
- 这篇文章主要介绍了c语言实现奇偶排序算法,有需要的朋友可以参考一下...2020-04-25