這篇文章列出了一些簡單常用的C++容器算法,C++標准庫中事實上提供了很多的算法並且有詳細的介紹。如果需要詳細的了解這些算法可以 參考C++在線參考手冊 algrithm .
1 排序
在 #include<algorithm>
中,調用形式為 sort(beign,end)
它的參數為一個輸入區間。注意end要指向需要排序的最后一個 元素的下一個位置。參數可以是指針也可以是迭代器。
int num[10]={1,3,5,7,9,0,2,4,6,8}; sort(num,num+10);
去除重復元素
一般需要unique函數(#include<algorithm>)和sort函數共同使用。unique函數實際上是一種偽去除函數, 它可以將容器中相鄰的重復元素放到容器的末尾,然后返回第一個重復元素的地址。由於重復元素相鄰才能放到末尾 所以需要使用sort先進行排序。下面這個例子用來去除vector中重復的元素。
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> vec; vector<int>::iterator iter; vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(4); sort(vec.begin(),vec.end()); for(vector<int>::iterator i =vec.begin();i != vec.end();++i) { cout<<*i<<" "; } cout<<endl; iter = unique(vec.begin(),vec.end()); vec.erase(iter,vec.end()); for(iter=vec.begin(); iter!=vec.end(); ++iter) cout<<*iter<<" "; cout<<endl; return 0; }
3 找到vector中最大值和最小值
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> vec(5); //5行 int i = 0; for(vector<int >::iterator ite=vec.begin();ite != vec.end();++ite) { *ite = i; i++; } //vector<int>::iterator maxIte = max_element(vec.begin(),vec.end()); //cout<<*maxIte<<endl; auto maxMin = minmax_element(vec.begin(),vec.end()); cout<<*maxMin.first<<","<<*maxMin.second<<endl; return 0; }
4 利用map比較函數進行排序
利用map在插入鍵值對時會自動排序,我們可以靈活的實現對數據的各種排序要求。如排序並獲得排序前對應的角標索引, 不排序獲得排序后的名次。下面是使用map獲得排序名次的一個示例:
#include <iostream> #include <vector> #include <map> using namespace std; class a { public: struct strA { double d; int I; }; }; int main() { vector<a::strA> a; a.resize(5); a[0].d = 2; a[1].d = 3; a[2].d = 0; a[3].d = -1; a[4].d = 8.4; map<double,int> temp; for(int i = 0;i < a.size();++i) temp.insert(make_pair(a[i].d,i)); //數據放入map中會自動按鍵值升序排序 int i = a.size(); for(map<double,int>::iterator it = temp.begin();it != temp.end();++it) { a[it->second].I = i; i--; } for(int i = 0;i < a.size();++i) cout<<a[i].d<<","<<a[i].I<<endl; return 0; }
執行結果:
2,3 3,2 0,4 -1,5 8.4,1
前面是需要排序的數( strA.d
),后面是對應的排序名次( strA.i
)。 實際上map的比較函數是可以自定義的,利用這一點我們可以更靈活的進行排序。