STL各種容器的API 泛型算法

 全部的區間都表示爲[a,b) 關於區間的一些忠告: [a,b)標識的區間必須隸屬於同一容器(標識的範圍能夠是容器的子集)  若是a,b不是同一容器的迭代器位置,那麼,可能形成死循環,甚至 訪問進程外的其餘非法地址,引發程序崩潰。傳參時,要仔細。區間必定要有效 什麼樣的區間才叫有效呢? 1好比你想處理[x,y],則傳入的區間應該是[x,y+1) 2必定要確保a相對有b在前。 好比當a,b範圍的迭代器時隨機的,則判斷a相對於b在前,可使用operator< 隨機迭代器:a<b <<==>>a相對b在前     #include <algorithm>  求區間內的最小值(第一個最小值的位置) template <typename  InputIterator> InputIteraor  min_elememt(InputIterator a,InputIterator b); 求區間內的最大值(第一個最大值的位置)  template <typename InputIteraor> InputIterator max_element(InputIterator a,InputIterator b); 求區間內第一個元素爲key的迭代器位置 template <typename InputIterator ,typename T> InputIterator find(InputIterator a,InpiutIterator b,const T& key); 將區間修改成反向順序  template <typename OutputIterator> void  reverse(OutputIterator a,OutputIterator b); 將區間內的元素排序(默認升序=operator<=less<T>,不然降序=operator>=greater<T>) template <typename InputIterator,...> void sort(InputIterator a,InputIterator b); template <typename InputIterator> size_t distance(InputIterator a,InputIterator b);   測量[a,b)之間的距離(元素個數)     2同時處理多個區間的算法: 對於同時處理多個區間的算法,必須給出一組完整的區間,用以標識第一個 區間的範圍。其餘區間秩序給出起點便可。由於,其餘區間上的處理取決於 第一區間的元素個數。好比,區間範圍的比較大小、copy、塗改目標區間等算法 一個準則是:目標區間要足夠大,至少要和第一區間同樣大 比較兩區間的大小:2.1 template <typename InputIterator> bool  equal_to(InputIterator a1,InputIterator b1, InputIterator a2); 把[a1,b1)拷貝到[dest,..):2.2 這是把[a1,b1)拷貝(覆蓋)到dest,並不是安插到dest。因此copy前 dest要有足夠的空間存放。  template <typename InputIterator> void copy(InputIterator a1,InputIterator b1,InputIteraor dest) 惟一拷貝2.3  template <typename InputIterator > void unique_copy(InputIterator a,InputIterator b,InputIterator dest); 把區間[a,b)表示的串無重複地拷貝到dest所在的區間。 因爲由涉及到覆蓋而不是安插。因此dest的範圍要至少和[a,b)同樣大  3修改類算法 修改類泛型算法不適用於關聯容器。若是真要修改關聯容器。用sTL提供的 成員函數去完成修改操做。對關聯容器應用泛型的修改類算法,會致使編譯錯誤    3.1 remove 算法: template <typename InputIterator> InputIterator remove(InputIterator a,InputIterator b,const ElemType& elem); 把區間[a,b)中的值爲elem的元素刪除,而且返回含有刪除元素的地址end 真正含有elem的子區間爲[end,list<T>::end());          
相關文章
相關標籤/搜索