C++實現算法常用的STL---整理
阿新 • • 發佈:2018-08-08
快排 reat spa 快速 The 第一個元素 c++ 也會 else
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)中進行二分查找key cout<< 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; //返回空字符串 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---整理