日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/27 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。