STL算法(排序)

簡介

merge
sort
random_shuffle
reverse

merge

合并兩個有序序列桥状,存放到另一個序列乖阵。函數(shù)定義:

 #if _ITERATOR_DEBUG_ARRAY_OVERLOADS
template<class _InIt1,
    class _InIt2,
    class _OutTy,
    size_t _OutSize,
    class _Pr> inline
    _OutTy *merge(_InIt1 _First1, _InIt1 _Last1,
        _InIt2 _First2, _InIt2 _Last2,
        _OutTy (&_Dest)[_OutSize], _Pr _Pred)
    {   // copy merging ranges, both using _Pred, array dest
    return (_Unchecked(
        _Merge_no_deprecate(_First1, _Last1,
            _First2, _Last2,
            _Array_iterator<_OutTy, _OutSize>(_Dest), _Pred)));
    }
 #endif /* _ITERATOR_DEBUG_ARRAY_OVERLOADS */

        // TEMPLATE FUNCTION merge
template<class _InIt1,
    class _InIt2,
    class _OutIt> inline
    _OutIt merge(_InIt1 _First1, _InIt1 _Last1,
        _InIt2 _First2, _InIt2 _Last2,
        _OutIt _Dest)
    {   // copy merging ranges, both using operator<
    return (_STD merge(_First1, _Last1, _First2, _Last2, _Dest,
        less<>()));
    }

sort

以默認(rèn)升序的方式重新排列指定范圍內(nèi)的元素塘揣。若要改排序規(guī)則,可以輸入比較函數(shù)宴树。

template<class _RanIt,
    class _Pr> inline
    void sort(_RanIt _First, _RanIt _Last, _Pr _Pred)
    {   // order [_First, _Last), using _Pred
    _DEBUG_RANGE(_First, _Last);
    _Sort_unchecked(_Unchecked(_First), _Unchecked(_Last), _Pred);
    }

        // TEMPLATE FUNCTION sort
template<class _RanIt> inline
    void sort(_RanIt _First, _RanIt _Last)
    {   // order [_First, _Last), using operator<
    _STD sort(_First, _Last, less<>());
    }

random_shuffle

對指定范圍內(nèi)的元素隨機(jī)調(diào)整次序
srand(time(0)); //設(shè)置隨機(jī)種子

template<class _RanIt> inline
    void random_shuffle(_RanIt _First, _RanIt _Last)
    {   // shuffle [_First, _Last) using rand()
    _Rand_urng_from_func _Func;
    _STD shuffle(_First, _Last, _Func);
    }

reverse

對指定范圍內(nèi)的元素逆序

template<class _BidIt> inline
    void reverse(_BidIt _First, _BidIt _Last)
    {   // reverse elements in [_First, _Last)
    _DEBUG_RANGE(_First, _Last);
    _Reverse_unchecked(_Unchecked(_First), _Unchecked(_Last));
    }

示例代碼

#include "stdafx.h"
#include "stdafx.h"
#include "iostream"
#include "string"
#include "algorithm"
#include "vector"
#include "list"
#include <functional>
using namespace std;
class Student {
private:
    int number;
    string name;
public:
    //Student() {
    //  this->number = -1;
    //  this->name = "";
    //}
    Student(int number, string name) {
        cout << "構(gòu)造 " << number << " " << name.c_str() << endl;
        this->number = number;
        this->name = name;
    }
    Student(const Student & stu) {
        //cout << "copy構(gòu)造" <<stu.getNumber()<<" "<<stu.getName().c_str()<< endl;
        this->number = stu.getNumber();
        this->name = stu.getName();
    }
    ~Student() {
        //cout<<"析構(gòu) " << this->number << " " << this->name.c_str() << endl;
    }

    Student& operator=(const Student& stu) {
        this->number = stu.getNumber();
        this->name = stu.getName();
        return *this;
    }

    void print()const {
        cout << "print 》》 " << this->number << " " << this->name.c_str() << endl;
    }

    int getNumber() const {
        return this->number;
    }
    string getName()const {
        return this->name;
    }
};

struct StuFunc
{
    bool operator()(const Student & stu1, const Student & stu2) const {
        cout << "StuFunc》》" << endl;
        stu1.print();
        stu2.print();
        return stu1.getNumber() <stu2.getNumber();
    }
};

void printStuV(vector<Student> v) {
    cout << "開始遍歷vector<Student>============" << endl;
    for (vector<Student>::iterator it = v.begin(); it != v.end(); it++) {
        it->print();
    }
    cout << "結(jié)束遍歷vector<Student>============" << endl;
}
void printNum(vector<int>v) {
    cout << "開始遍歷vector<int>============" << endl;
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
    cout << "結(jié)束遍歷vector<int>============" << endl;
}

int main()
{
    //merge示例
    vector<int> vNum;
    vNum.push_back(1);
    vNum.push_back(3);
    vNum.push_back(5);
    vector<int> vNum2;
    vNum2.push_back(2);
    vNum2.push_back(4);
    vector<int> vNum3;
    vNum3.resize(vNum.size() + vNum2.size());
    merge(vNum.begin(), vNum.end(), vNum2.begin(), vNum2.end(), vNum3.begin());
    printNum(vNum3);

    vector<Student> v;
    v.push_back(Student(1, "one"));
    Student stu2(2, "two");
    v.push_back(stu2);
    v.push_back(Student(4, "four"));
    v.push_back(Student(3, "three"));
    v.push_back(Student(5, "five"));
    cout << "sort 隨機(jī)排序" << endl;
    sort(v.begin(), v.end(), StuFunc());
    printStuV(v);
    cout << "random_shuffle 隨機(jī)排序" << endl;
    random_shuffle(v.begin(), v.end());
    printStuV(v);
    cout << "reverse 逆序" << endl;
    reverse(v.begin(), v.end());
    printStuV(v);
    return 0;
}

結(jié)果:

sort
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市靴拱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猾普,老刑警劉巖袜炕,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抬闷,居然都是意外死亡妇蛀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門笤成,熙熙樓的掌柜王于貴愁眉苦臉地迎上來评架,“玉大人,你說我怎么就攤上這事炕泳∽莸” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵培遵,是天一觀的道長浙芙。 經(jīng)常有香客問我,道長籽腕,這世上最難降的妖魔是什么嗡呼? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮皇耗,結(jié)果婚禮上南窗,老公的妹妹穿的比我還像新娘。我一直安慰自己郎楼,他們只是感情好万伤,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呜袁,像睡著了一般敌买。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阶界,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天虹钮,我揣著相機(jī)與錄音,去河邊找鬼膘融。 笑死芜抒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的托启。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼攘宙,長吁一口氣:“原來是場噩夢啊……” “哼屯耸!你這毒婦竟也來了拐迁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤疗绣,失蹤者是張志新(化名)和其女友劉穎线召,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體多矮,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡缓淹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了塔逃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讯壶。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖湾盗,靈堂內(nèi)的尸體忽然破棺而出伏蚊,到底是詐尸還是另有隱情,我是刑警寧澤格粪,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布躏吊,位于F島的核電站,受9級特大地震影響帐萎,放射性物質(zhì)發(fā)生泄漏比伏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一疆导、第九天 我趴在偏房一處隱蔽的房頂上張望赁项。 院中可真熱鬧,春花似錦是鬼、人聲如沸肤舞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽李剖。三九已至,卻和暖如春囤耳,著一層夾襖步出監(jiān)牢的瞬間篙顺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工充择, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留德玫,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓椎麦,卻偏偏與公主長得像宰僧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子观挎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容