STL的演算法中,一些很簡練的演算法 持續更新

2021-07-06 05:35:59 字數 2129 閱讀 1031

在序列1中尋找序列2第一次出現的位置在 sgi_stl 中採用了以第乙個序列中的每乙個元素作為標誌的方法向後匹配,直到匹配到第二個序列完整出現。假設第乙個序列的長度為n,第二個序列的長度為m,在最壞的情況下,該演算法的複雜度為 o((n-m)*m)。該演算法的亮點在於寫得特別簡介明了。具體**如下:

templateinputiterator1 __search(inputiterator1 first1, inputiterator1 last1, inputiterator2 first2, inputiterator2 last2, distance1*, distance2*)

else

}} return first1;

sgi stl中的二分查詢寫得也很明確間接,是值得學習的**。其中二分查詢範圍為[first,last),具體**如下:

templaterandomaccessiterator __lower_bound(randomaccessiterator first, randomaccessiterator last, const t & value, distance *, random_access_iterator_tag)

else

len = half;

} return first;

}

sgi stl 中尋找n個連續滿足條件的序列的方法是:首先找到第乙個滿足條件的元素的位置,然後檢查連續的 n-1 個元素是否滿足要求,若滿足,則返回,否則,再次尋找下乙個滿足該條件的第乙個元素,重複上述步驟。具體**如下:

templateinputiterator search_n(inputiterator first, inputiterator last, integer count, const t& value, binarypredicate binary_pred)

while (first != last)

if (n == 0) //滿足條件則返回

return first;

else

first = i;}}

return last;

} }

sgi stl中的 parittion 使用了前後兩個迭代器同時移動進行判斷,左邊的迭代器找到不符合條件的位置,右邊的迭代器找到符合條件的位置,然後雙方交換迭代器所指內容,左右迭代器共同往中間移動一格後繼續尋找各自的條件,重複直到兩個迭代器重合,此時重合處總是指向不符合條件的第乙個元素的位置。此時演算法並不保證元素之間的穩定性。希望保持相同元素之間的穩定性可以使用 演算法導論中的 partition, 即使用兩個迭代器同向移動的方法。如果希望保持所有元素之間的穩定性,stl 中有乙個 stable_partition 來實現該需求,其中需要新開闢一段臨時空間用來存放不滿足條件的元素,之後將不滿足條件的元素全部 copy 到滿足元素之後即可。關於partition **如下:

templatebidirectioniterator partition(bidirectioniterator first, bidirectioniterator last, predicate pred)

--last; //從上一次\滿足條件的位置的前乙個位置開始

while (true) //從右往左尋找滿足條件的位置

_lxx::iter_swap(first, last); //交換找到的兩個位置

} }

其中,關於保持全部元素的相對穩定性的演算法如下,此處我只是摘選出了重點處理部分:

template forwarditerator __stable_partition_adaptive(forwarditerator first,

forwarditerator last,

predicate pred, distance len,

pointer buffer,

distance buffer_size)

else

copy(buffer, result2, result1); //將臨時容器中的元素存入滿足條件的元素後

return result1;

} else

}

書中一些高效的演算法

1.最大子串行問題解答 乙個序列,可能有負數 int maxsubsequencesum const int a,int n int thissum,maxsum,j thissum maxsum 0 for j 0 jthissum a j if thissum maxsum maxsum thi...

記憶體管理中一些演算法

在記憶體管理中存在這兩類演算法 一類是記憶體分配演算法,一類是頁面置換演算法 常見記憶體分配演算法及優缺點如下 1 首次適應演算法。使用該演算法進行記憶體分配時,從空閒分割槽鏈首開始查詢,直至找到乙個能滿足其大小要求的空閒分割槽為止。然後再按照作業的大小,從該分割槽中劃出一塊記憶體分配給請求者,餘下...

資料結構中一些常用的演算法

1.計算二項式係數 動態規劃 coding utf 8 computing c n,k def binomial coefficient n,k if k 0 or k n result 1 else result binomial coefficient n 1,k 1 binomial coef...