C++實現演算法常用的STL---整理

來源:互聯網
上載者:User

標籤:時間   binary   迭代器   出現   用法   second   指標   hello   出棧   

algorithm  sort快排
#include<algorithm>   //注意包含algorithm標頭檔#include<iostream>using namespace std;int main(){    int arr[] = {1,9,8,4,3,6,0,11};    int length = sizeof(arr) / 4;    //快速排序    //sort的排序範圍是[start, end),預設使用從小到大排序。    sort(arr, arr + 3);   //只排序前3個    sort(arr + 2, arr + length); //排序第2個元素之後的元素。    sort(arr, arr + length); //排序整個數組    sort(arr, arr + length, greater<int>()); //從大到小排序整個數組    return 0;}

  

  binary_search二分尋找
int arr[] = {0,3,5,7,10,15,19,20,22,24,27};int length = sizeof(arr) / 4;bool isFind = true;isFind = binary_search(arr + 2, arr + length, 19); //在[start, end)中進行二分尋找keycout<< isFind << endl;
 stack
#include<stack>   //注意包含stack標頭檔#include<iostream>using namespace std;int main(){    stack<int> s; //聲明stack中的類型,以及棧名稱    s.push(3);    s.push(4);    //入棧    int length = s.size(); //擷取棧元素數量    int top = s.top();    //擷取棧頂元素(不出棧)    s.pop();    //出棧    bool isEmpty = s.empty();    return 0;}
 queue
#include<iostream>#include<queue>   //注意包含queue標頭檔using namespace std;int main(){    queue<string> q;    string s;    q.push("hello");  //入隊    q.push("world");    cout<< q.front() << endl;   //hello 擷取隊首元素值,但是不出隊    cout<< q.back() << endl;    //world 擷取隊尾元素值,但是不出隊    q.pop();   //隊首元素出隊    cout<< q.front() << endl;   //world    cout<< "size " << q.size() << endl;    cout<< "isEmpty " << q.empty() <<endl;    return 0;}

  

 

set/multiset

  multiset/set使用平衡二叉樹的資料結構,插入和尋找時間複雜度都是log n。

  multiset和set的用法相同,只有一個區別:

    1、multiset中可以出現重複的元素。

    2、set中不會出現重複的元素,即使添加重複的元素,也會自動去重。

#include<iostream>#include<set>   //multiset和set都要包含set標頭檔using namespace std;int main(){    int arr[10] = {5,1,2,4,6,4,3,5,8,8};//有重複的元素    int i;    multiset<int> ms; //建立一個空格multiset集合    for (i = 0; i < 10; i++) {        ms.insert(arr[i]);    }    multiset<int>::iterator p;  //聲明一個迭代器,類似於指標    for (p = ms.begin(); p != ms.end(); p++) {        //ms.begin()  返回一個迭代器,指向multiset的第一個元素        //ms.end()   返回一個迭代器,指向multiset最後一個元素的後面一個位置        cout << *p << " ";    //1 2 3 4 4 5 5 6 8 8    }    cout << endl;    int length = ms.size();   //集合中元素的數量    bool isEmpty = ms.empty();  // 集合是否為空白    int cnt = ms.count(8);   //計算一個數出現的次數    cout<< length << " " << isEmpty << " " << cnt << endl;  // 10  0   2    //尋找元素,如果找到的話,返回一個迭代器指向找到的元素。如果沒有找到的話,就返回multiset中元素總個數size    p = ms.find(8);    if (*p != ms.size()) {        cout<< "found " << *p << endl;   //8        ms.erase(*p);   //刪除集合中所有的8,不是只刪除一個。        cout<< "after delete , the size is "<< ms.size() << endl;    } else {        cout<<"not found"<<endl;    }    return 0;}
  map/multimap

   map和multimap的都是使用hash演算法。

  區別在於,map中的key只能出現一次,而multimap可以出現很多次。

#include<iostream>#include<map>   //multimap和map都要包含set標頭檔using namespace std;int main(){    map<string, string> m;    m["one"] = "hello";    m["two"] = "world";    m.insert(pair<string, string>("three", "C++"));    bool isEmpty = m.empty();    int length = m.size();    string s = m["one"];  //找到的話,就返回對應的值    cout<< s <<endl;   // hello    s = m["four"];    //未找到的話,就返回一個類型零值    cout<< s <<endl;  //返回Null 字元串    map<string, string>::iterator p;    p = m.find("one");    cout<< p->second << endl; //輸出one對應的值--> hello    m.erase(p);  //刪除某個key    for (p = m.begin(); p != m.end(); p++) {        cout<< p->second << " ";  // C++ world    }    m.clear(); //清空map    return 0;}

  

C++實現演算法常用的STL---整理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.