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();
}
運行結果:
總結
以上是生活随笔為你收集整理的STL算法find,find_if,find_if_not,sort,fill,for_each,count,adjacent_find,random_shuffle,prev_permutation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白酒股票属于什么板块
- 下一篇: 1.备忘录模式