C++STL常用算法

查找算法

adjacent_find()

在iterator對標識元素范圍內,查找一對相鄰重復元素,找到則返回指向這對元素的第一個元素的迭代器。否則返回past-the-end。

    vector<int> vecInt;
    vecInt.push_back(1);
    vecInt.push_back(2);
    vecInt.push_back(3);
    vecInt.push_back(4);
    vecInt.push_back(5);
    vecInt.push_back(5);
    vector<int>::iterator it = adjacent_find(vecInt.begin(), vecInt.end());

binary_search

在有序序列中查找value,找到則返回true。注意:在無序序列中,不可使用。

    set<int> setInt;
    setInt.insert(2);
    setInt.insert(1);
    setInt.insert(8);
    setInt.insert(5);
    setInt.insert(9);
    bool bFind = binary_search(setInt.begin(),setInt.end(),8);

count()

利用等于操作符,把標志范圍內的元素與輸入值比較,返回相等的個數。

   vector<int> vecInt;
    vecInt.push_back(8);
    vecInt.push_back(2);
    vecInt.push_back(1);
    vecInt.push_back(4);
    vecInt.push_back(8);
    vecInt.push_back(6);
    int iCount = count(vecInt.begin(),vecInt.end(),8);  //iCount==2

count_if()

count_if 算法計算中的元素范圍 [first, last),返回滿足條件的元素的數量。

   vector<int> vecInt;
    vecInt.push_back(3);
    vecInt.push_back(3);
    vecInt.push_back(1);
    vecInt.push_back(4);
    vecInt.push_back(8);
    vecInt.push_back(9);
    int count = count_if(vecInt.begin(), vecInt.end(), evenNumber);// 偶數個數是 2;

find

利用底層元素的等于操作符,對指定范圍內的元素與輸入值進行比較。當匹配時,結束搜索,返回該元素的迭代器。

    vector<int> vecInt;
    vecInt.push_back(3);
    vecInt.push_back(3);
    vecInt.push_back(2);
    vecInt.push_back(4);
    vecInt.push_back(8);
    vecInt.push_back(9);
    vector<int>::iterator it = find(vecInt.begin(), vecInt.end(), 2);

equal_range:

返回一對iterator,第一個表示lower_bound,第二個表示upper_bound。

    set<int> setInt;
    for (int i=0; i<10; i++)
    {
        setInt.insert(i+1);
    }
    pair<set<int>::iterator, set<int>::iterator>  mypair = setInt.equal_range(3);
    set<int>::iterator it1 = mypair.first;
    cout << "it1:" << *it1 << endl;  //3  //4
    set<int>::iterator it2 =  mypair.second;
    cout << "it2:" << *it2 << endl;  //4  //4

查找算法

merge()
以下是排序和通用算法:提供元素排序策略
merge: 合并兩個有序序列,存放到另一個序列。
例如:vecIntA,vecIntB,vecIntC是用vector<int>聲明的容器,vecIntA已包含1,3,5,7,9元素,vecIntB已包含2,4,6,8元素
vecIntC.resize(9); //擴大容量
merge(vecIntA.begin(),vecIntA.end(),vecIntB.begin(),vecIntB.end(),vecIntC.begin());
此時vecIntC就存放了按順序的1,2,3,4,5,6,7,8,9九個元素

sort()

sort: 以默認升序的方式重新排列指定范圍內的元素。若要改排序規則,可以輸入比較函數。

//學號比較函數
bool Compare(const Student &stuA,const Student &stuB)
{
    return (stuA.getID()<stuB.getID());
}
int main()
{
    vector<Student> vecStu;
    vecStu.push_back(Student(2,"趙彤"));
    vecStu.push_back(Student(1,"王偉"));
    vecStu.push_back(Student(4,"李明"));
    vecStu.push_back(Student(3,"張燕"));
    sort(vecStu.begin(),vecStu.end(),Compare);
    for (vector<Student>::iterator it =  vecStu.begin();it!= vecStu.end();it++) {
        cout<<it->getName() <<endl;
    }
}

random_shuffle()
random_shuffle: 對指定范圍內的元素隨機調整次序。

        srand(time(0));         //設置隨機種子

        vector<int> vecInt;
        vecInt.push_back(1);
        vecInt.push_back(3);
        vecInt.push_back(5);
        vecInt.push_back(7);
        vecInt.push_back(9);

        string str("itcastitcast ");
    
        random_shuffle(vecInt.begin(), vecInt.end());   //隨機排序,結果比如:9,7,1,5,3
        random_shuffle(str.begin(), str.end());        //隨機排序,結果比如:" itstcasticat "

reverse()

        vector<int> vecInt;
        vecInt.push_back(1);
        vecInt.push_back(3);
        vecInt.push_back(5);
        vecInt.push_back(7);
        vecInt.push_back(9);
        reverse(vecInt.begin(), vecInt.end());      //{9,7,5,3,1}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容