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;

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();

}

运行结果:

时间: 2024-08-28 06:27:34

STL算法find,find_if,find_if_not,sort,fill,for_each,count,adjacent_find,random_shuffle,prev_permutation的相关文章

STL 源码剖析 算法 stl_algo.h -- merge sort

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie merge sort ---------------------------------------------------------------------- 描述:归并排序 思路: 1.将区间对半分割 2.对左.右段分别排序 3.利用inplace_merge将左.右段合并成为一个完整的有序序列 复杂度:O(nlog n) 源码: template<class Bidirection

STL算法 — sort

能使用STL的sort系列算法的前提是容器的迭代器必须为随机迭代器.所以,vector和deque天然适用.STL的sort算法采用了一些策略,在不同情况下采用不同的排序算法,以达到各种算法优势互补的效果.基本的原则是:数据量大时采用快速排序,数据量小时采用插入排序(这是对快排常用的一种优化策略),递归层次过深改用堆排序. 首先是插入排序.它的平均和最坏时间复杂度都为O(N2),量级小于千,那么插入排序还是一个不错的选择.SGI STL的插入排序默认以增序排列,另外还可以传入一个仿函数作为比较规

STL源代码分析——STL算法sort排序算法

前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SGI STL中的排序算法不是简单的高速排序,而是交叉利用各种排序:堆排序.插入排序和高速排序:这样做的目的是提高效率.针对数据量比較大的採用高速排序,数据量比較小的能够採用堆排序或插入排序. 本文介绍了有关排序的算法random_shuffle.partition.stable_partition.sort.s

STL源码剖析——STL算法之sort排序算法

前言 由于在前文的<STL算法剖析>中,源码剖析非常多,不方便学习,也不方便以后复习,这里把这些算法进行归类,对他们单独的源码剖析进行讲解.本文介绍的STL算法中的sort排序算法,SGI STL中的排序算法不是简单的快速排序,而是交叉利用各种排序:堆排序.插入排序和快速排序:这样做的目的是提高效率,针对数据量比较大的采用快速排序,数据量比较小的可以采用堆排序或插入排序.注意:STL的sort排序算法的迭代器必须是随机访问迭代器. sort排序算法剖析 // Return a random n

【C/C++学院】0830-兰不达表达式/STL算法-操作数据

兰不达表达式 #include<iostream> #include<vector> #include<algorithm>//算法 lambda表达式,不仅仅适用与array ,也适用于vector void main1() { std::vector<int> myvector; myvector.push_back(11); myvector.push_back(22); myvector.push_back(33); myvector.push_ba

C++标准库(三)之STL算法

算法头文件: #include<algorithm> #include<numeric> 算法简介:STL算法采用覆盖模式而非安插模式,所以调用者必须保证有足够的操作空间. 函数对象类型声明: UnaryProc:Op(elem),无返回值 CompFunc:Op(elem1,elem2),返回True或者False UnaryPredicate:Op(elem),返回True或者False BinaryPredicate:Op(elem,value),返回True或者False

STL 算法[转 ]

STL 算法 STL算法概述 简介: STL算法部分主要由头文 件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorithm>,对于数值算法须包 含<numeric>,<functional>中则定义了一些模板类,用来声明函数对象 注意: 编译器无法检测出所传递的迭代器是一个无效形式的迭代器,当然也无法给出算法函数错误的提示,因为迭代器并不是真实的类别,它只是

YXXYUPO0C++STL算法函数总结

容器自己定义了的算法vector:swaplist:swap,merge,splice,remove,remove_if,reverse,uniquedeque:swapmap,set,multiset,multimap:find,count,lower_bound,upper_bound,equal_bound(返回pair<lower_bound,upper_bound>) all_ofany_ofnone_offor_eachfind(it.b,it.e,val)find_iffind_

STL 算法

STL 算法(本文转自:http://www.cnblogs.com/kzloser/archive/2012/11/02/2751424.html) 阅读目录如下: STL算法概述查找算法堆算法关系算法集合算法排列组合算法排序和通用算法删除和替换算法生成和变异算法算数算法 STL算法概述 简介: STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorithm>