STL算法find,find_if,find_if_not,sort,fill,for_each,count,adjacent_find,random_shuffle,prev_permutation

简介:  1find查找 #include<iostream> #include<vector> #include<algorithm> #include<list> #include<set> #include<string>   usingnamespacestd;


1find查找

#include<iostream>

#include<vector>

#include<algorithm>

#include<list>

#include<set>

#include<string>

 

usingnamespacestd;

 

voidmain()

{

   vector<int>myv;

   myv.push_back(1);

   myv.push_back(2);

   myv.push_back(3);

   myv.push_back(11);

   myv.push_back(22);

   myv.push_back(33);

   for_each(myv.begin(),myv.end(), [](intv){cout <<v <<endl; });

   auto i =find(myv.begin(),myv.end(), 23);

 

   //说明已经到了最后面

   if (i == myv.end())

   {

       std::cout << "23玩失踪";

   }

   else

   {

       //如果找到了则输出结果

       std::cout << *i;

   }

   cin.get();

}

运行结果:

2find_if,find_if_not

#include<iostream>

#include<vector>

#include<algorithm>

#include<list>

#include<set>

#include<string>

 

usingnamespacestd;

 

voidmain()

{

   vector<int>myv;

   myv.push_back(1);

   myv.push_back(2);

   myv.push_back(3);

   myv.push_back(11);

   myv.push_back(22);

   myv.push_back(33);

   for_each(myv.begin(),myv.end(), [](intv){cout <<v <<endl; });

 

   std::cout << "-------" <<std::endl;

 

   //找到第一个比11大的值

   autoii =find_if(myv.begin(),myv.end(), [](intv)->bool{return (v > 11); });

   //找到第一个不比4大的值

   auto i =find_if_not(myv.begin(),myv.end(), [](intv)->bool{return (v > 4); });

 

   if (ii == myv.end())

   {

       std::cout << "没找到" << endl;

   }

   else

   {

       std::cout << *ii <<endl;

   }

 

   std::cout << "-------" <<std::endl;

 

   if (i == myv.end())

   {

       std::cout << "玩失踪";

   }

   else

   {

       std::cout << *i;

   }

   cin.get();

}

运行结果是:

3sort,fill,for_each

#include<iostream>

#include<vector>

#include<algorithm>

#include<list>

#include<set>

#include<string>

 

usingnamespacestd;

template <classT>

classshow

{

public:

   void operator()(T &t)

   {

       cout <<t <<" ";

   }

};

 

voidmain()

{

   list<int>list1;

   vector<int>v1;

   list1.push_back(121);

   list1.push_back(12);

   list1.push_back(122);

   list1.push_back(23);

 

   v1.push_back(121);

   v1.push_back(12);

   v1.push_back(122);

   v1.push_back(17);

   v1.push_back(23);

 

   //list不能通过sort进行排序,如果放开这一句将出现错误

   //sort(list1.begin(), list1.end());

   //排序,简单的排序

   sort(v1.begin(),v1.end());

 

   //算法依赖于数据结构(链式,线性),不同的数据结构,算法不一样

   //填充,指定位置数据进行初始化,begin()+2到最后的数值填充为3

   fill(v1.begin() + 3, v1.end(), 3);

 

   for_each(list1.begin(),list1.end(),show<int>());

   cout <<"\n";

   for_each(v1.begin(),v1.end(),show<int>());

 

   cin.get();

}

运行结果:

4.count,统计某个节点值相同的元素有多少个

#include<iostream>

#include<vector>

#include<algorithm>

#include<list>

#include<set>

#include<string>

 

usingnamespacestd;

 

voidmain()

{

   multiset<int > myset;

   myset.insert(3);

   myset.insert(1);

   myset.insert(2);

   myset.insert(1);

   myset.insert(2);

   myset.insert(1);

   myset.insert(2);

   myset.insert(1);

   myset.insert(1);

   myset.insert(1);

 

   cout <<"统计总共的节点" << endl;

   inti = 0;

   for (autoib =myset.begin(),ie =myset.end();ib !=ie;ib++,i++)

   {}

   cout <<i <<endl;

   

   //统计有多少个节点1

   cout <<"统计值为1的节点个数有多少个" << endl;

   intnum =count(myset.begin(),myset.end(), 1);

   cout <<num <<endl;

 

   cin.get();

}

运行结果:

5. adjacent_find,依次打印出结果:

#include<iostream>

#include<vector>

#include<algorithm>

#include<list>

#include<set>

#include<string>

 

usingnamespacestd;

 

template <classT>

classshow

{

public:

   void  operator ()(T &t)

   {

       cout <<t <<" ";

   }

 

};

 

voidmain()

{

   multiset<int > myset;

   myset.insert(3);

   myset.insert(1);

   myset.insert(2);

   myset.insert(1);

   myset.insert(2);

   myset.insert(1);

   myset.insert(2);

 

   for_each(myset.begin(),myset.end(),show<constint>());

   //通过这种方式一个个的打印出结果

   autoit =adjacent_find(myset.begin(),myset.end());

   cout <<"\n" << *it <<endl;

   it++;

   cout <<"\n" << *it <<endl;

   it++;

   cout <<"\n" << *it <<endl;

   it++;

   cout <<"\n" << *it <<endl;

   //查找相同的数据,可以自己确定位置

   it =adjacent_find(it,myset.end());

 

   cout <<"\n" << *it <<endl;

   it++;

   cout <<"\n" << *it <<endl;

   it++;

   cout <<"\n" << *it <<endl;

   it++;

   cout <<"\n" << *it <<endl;

   

   cin.get();

}

运行结果:

6. random_shuffle实现随机排序

#include<iostream>

#include<vector>

#include<algorithm>

#include<list>

#include<set>

#include<string>

 

usingnamespacestd;

 

template <classT>

classshow

{

public:

   void  operator ()(T &t)

   {

       cout <<t <<" ";

   }

 

};

 

voidmain()

{

   vector<int>v1;

   for (inti = 0;i < 10;i++)

   {

       v1.push_back(i);

   }

   for_each(v1.begin(),v1.end(),show<int>());

   cout <<"\n";

   //通过random_shuffle的方式实现随机排序vector

   random_shuffle(v1.begin(),v1.end());

   for_each(v1.begin(),v1.end(),show<int>());

   cout <<"\n";

   random_shuffle(v1.begin(),v1.end());

   for_each(v1.begin(),v1.end(),show<int>());

   cout <<"\n";

   random_shuffle(v1.begin(),v1.end());

   for_each(v1.begin(),v1.end(),show<int>());

   

   cin.get();

}

运行结果:

用途:随机洗牌

7. partition分区

#include<iostream>

#include<vector>

#include<algorithm>

 

usingnamespacestd;

 

template <classT>

classshow

{

public:

   void  operator ()(T &t)

   {

       cout <<t <<" ";

   }

};

 

boolisok(intnum)

{

   return (num >= 10);

}

 

voidmain()

{

   vector<int>v1;

   v1.push_back(20);

   v1.push_back(23);

   v1.push_back(6);

   v1.push_back(27);

   v1.push_back(5);

   v1.push_back(67);

   v1.push_back(10);

   v1.push_back(13);

   v1.push_back(14);

   v1.push_back(3);

 

   for_each(v1.begin(),v1.end(),show<int>());

   //服务于快速排序的分区

   partition(v1.begin(),v1.end(),isok);

   

   cout <<"\n";

 

   cout <<endl;

   for_each(v1.begin(),v1.end(),show<int>());

 

   cin.get();

}

运行结果:

分析,本质:

8. prev_permutation查看排序过程

#include<iostream>

#include<vector>

#include<algorithm>

 

usingnamespacestd;

 

voidmain()

{

   inta[4] = { 2, 1, 3, 10 };

   do

   {

       cout <<a[0] <<" " <<a[1] <<" " <<a[2] <<" " <<a[3] <<"\n";

       //通过下面这个代码查看排序过程

   } while (prev_permutation(a,a+4));

   cin.get();

}

运行结果:

9.sort排序

#include<iostream>

#include<vector>

#include<algorithm>

 

usingnamespacestd;

 

template <classT>

classshow

{

public:

   void  operator ()(T &t)

   {

       cout <<t <<" ";

   }

};

 

voidmain()

{

   vector<char>myvector;

   myvector.push_back('B');

   myvector.push_back('A');

   myvector.push_back('C');

   myvector.push_back('Y');

   myvector.push_back('Z');

   myvector.push_back('X');

   for_each(myvector.begin(),myvector.end(),show<char>());

   //sort(one.begin(), one.begin() + 3);

   sort(myvector.begin(),myvector.begin() + 3);

   cout <<"\n";

   for_each(myvector.begin(),myvector.end(),show<char>());

 

   cin.get();

}

运行结果:

10. partial_sort部分排序

#include<iostream>

#include<vector>

#include<algorithm>

#include<list>

#include<set>

#include<string>

 

usingnamespacestd;

classstudent

{

public:

   stringname;

   intscore;

 

public:

   student(stringstr,intnum) :name(str),score(num)

   {

   }

   bool operator <(conststudent &s1)const

   {

       returnthis->score < s1.score;

   }

};

 

intmain()

{

   vector<student>ss;

   {

       students1("totoA", 106);

       ss.push_back(s1);

   }

   {

       students1("totoB", 101);

       ss.push_back(s1);

   }

   {

       students1("totoC", 103);

       ss.push_back(s1);

   }

   {

       students1("totoD", 105);

       ss.push_back(s1);

   }

   {

       students1("totoE", 67);

       ss.push_back(s1);

   }

   {

       students1("totoF", 58);

       ss.push_back(s1);

   }

   {

       students1("totoG", 111);

       ss.push_back(s1);

   }

   //部分排序

   partial_sort(ss.begin(),ss.begin() + 4, ss.end());//部分排序

 

   for (inti = 0;i < 7;i++)

   {

       std::cout << ss[i].name << ss[i].score << "\n";

   }

   cin.get();

}

运行结果:

目录
相关文章
|
15天前
|
搜索推荐 算法 Java
sort-06-shell sort 希尔排序算法详解
这是一个关于排序算法的系列文章摘要。文章汇总了各种排序算法,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序以及大文件外部排序。特别地,希尔排序是一种改进的插入排序,通过使用不同的步长对元素进行分组排序,以提高效率。算法最终以较小的步长进行排序,接近线性时间复杂度。文章还提供了Java代码实现,并举例说明了希尔排序的过程。所有内容可在开源项目[https://github.com/houbb/sort](https://github.com/houbb/sort)中找到。
|
15天前
|
搜索推荐 算法 Java
sort-05-insert sort 插入排序算法详解
这是一个关于排序算法的系列文章总结,包括冒泡排序、快速排序、选择排序、堆排序、插入排序等10种排序算法的详细讲解和Java实现。插入排序是一种简单直观的排序算法,通过构建有序序列并逐个插入新元素来排序。提供的Java代码展示了插入排序的实现过程,并附有测试示例。所有算法已开源在GitHub项目[https://github.com/houbb/sort](https://github.com/houbb/sort)中。
|
15天前
|
人工智能 搜索推荐 算法
sort-04-heap sort 堆排序算法详解
这是一个关于排序算法的系列文章摘要,包括了10篇关于不同排序算法的链接,如冒泡排序、快速排序、选择排序、堆排序等。堆排序是一种基于比较的排序算法,利用了近似完全二叉树的结构并满足最大堆或最小堆的性质。最大堆中,每个节点的值都大于或等于其子节点。文章详细解释了最大堆的概念、节点访问方式以及堆的操作,包括堆调整和堆排序的过程,并通过图解展示了堆排序的具体步骤。此外,还提供了一个Java实现的堆排序代码示例。整个排序系列来源于一个开源项目,读者可以通过链接查看完整内容。
sort-04-heap sort 堆排序算法详解
|
15天前
|
搜索推荐 算法 Java
sort-01-bubble sort 冒泡排序算法详解
这是一个关于排序算法的系列文章摘要。作者整理了10种不同的排序算法,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序和大文件外部排序。文章详细介绍了冒泡排序的工作原理、流程,并提供了代码实现,强调了在实现中考虑的改进点,如统一接口、实用性增强和日志输出。此外,还提供了一个排序接口和工具类以方便使用,并通过测试代码和日志展示了排序过程。整个系列旨在帮助读者理解和掌握排序算法。相关代码已开源在GitHub。
|
2月前
|
存储 算法 JavaScript
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(二)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
34 0
|
2月前
|
算法 搜索推荐 程序员
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(一)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
41 0
|
2天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
3天前
|
存储 算法 数据可视化
基于harris角点和RANSAC算法的图像拼接matlab仿真
本文介绍了使用MATLAB2022a进行图像拼接的流程,涉及Harris角点检测和RANSAC算法。Harris角点检测寻找图像中局部曲率变化显著的点,RANSAC则用于排除噪声和异常点,找到最佳匹配。核心程序包括自定义的Harris角点计算函数,RANSAC参数设置,以及匹配点的可视化和仿射变换矩阵计算,最终生成全景图像。
|
3天前
|
算法 Serverless
m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB 2022a仿真实现了遗传优化的归一化最小和(NMS)译码算法,应用于低密度奇偶校验(LDPC)码。结果显示了遗传优化的迭代过程和误码率对比。遗传算法通过选择、交叉和变异操作寻找最佳归一化因子,以提升NMS译码性能。核心程序包括迭代优化、目标函数计算及性能绘图。最终,展示了SNR与误码率的关系,并保存了关键数据。
12 1
|
4天前
|
算法 调度
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】