青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Programmer's Cookbook

{C++ 基礎(chǔ)} {C++ 高級} {C#界面,C++核心算法} {設(shè)計模式} {C#基礎(chǔ)}

STL算法學(xué)習(xí)

STL算法學(xué)習(xí),小結(jié)如下:

前提:

下載stl源碼: ?http://www.sgi.com/tech/stl/download.html
打開網(wǎng)頁:???? http://www.sgi.com/tech/stl/stl_index.html

一?? 函數(shù)對象: 因為很多的算法中多使用了函數(shù)對象


二元函數(shù)對象,V1和V2為輸入,V3為結(jié)果

plus<T>:
? transform(V1.begin(), V1.end(), V2.begin(), V3.begin(),plus<double>());

其他的二元函數(shù)對象:minus,multiples,divieds,modulus.

二元斷言函數(shù)對象,使用時需要bind2nd()或bind1st()來綁定比較對象。

less<T>:
? find_if(L.begin(), L.end(), bind2nd(less<int>(), 0));

其他的二元斷言函數(shù):equal_to,notequal_to,greater,greater_equal,less_equal,logical_and,logical_or

二元邏輯函數(shù)

binary_negate:
const char* wptr = find_if(str, str + MAXLEN,
?????????????????????????? compose2(not2(logical_or<bool>()),
??????????????????????????????????? bind2nd(equal_to<char>(), ' '),
??????????????????????????????????? bind2nd(equal_to<char>(), '\n')));

一元函數(shù)對象

negate:
transform(V1.begin(), V1.end(), V2.begin(),
????????? negate<int>());

一元斷定函數(shù)對象

logical_not:
? transform(V.begin(), V.end(), V.begin(), logical_not<bool>());

一元邏輯函數(shù)

unary_negate:


二?? 函數(shù)對象發(fā)生器:主要用來填充序列。


產(chǎn)生不重復(fù)的隨機(jī)數(shù):
// Generate unique random numbers from 0 to mod:
class URandGen {
? std::set<int> used;
? int limit;
public:
? URandGen(int lim) : limit(lim) {
??? srand(time(0));
? }
? int operator()() {
??? while(true) {
????? int i = int(rand()) % limit;
????? if(used.find(i) == used.end()) {
??????? used.insert(i);
??????? return i;
????? }
??? }
? }
};

const int sz = 10;
const int max = 50;
vector<int> x(sz), y(sz), r(sz);
//An integer random number generator:
URandGen urg(max);
generate_n(x.begin(), sz, urg);

三 函數(shù)對象適配器 : 將函數(shù)轉(zhuǎn)化為函數(shù)對象

ptr_fun:一般函數(shù)適配器

一元實例:
transform(first, last, first,
????????? compose1(negate<double>, ptr_fun(fabs)));

二元實例:
list<char*>::iterator item =
????????????? find_if(L.begin(), L.end(),
????????????????????? not1(binder2nd(ptr_fun(strcmp), "OK")));

not1:對一元的斷定函數(shù)對象取反的適配器。

not2: 對二元的斷定函數(shù)對象取反的適配器。

mem_fun與mem_fun_ref:類成員函數(shù)的適配器,區(qū)別是一個需要指針,而另一個僅需要一般對象。如下:
shape是一個指針變量,則foreach(v.begin(),v.end(),mem_fun(&shape::draw));
但如果shape是一般的變量,不是指針,則foreach(v.begin(),v.end(),mem_fun_ref(&shape::draw));

四?? 算法:

拷貝:
copy()
reverse_copy()
rotate_copy()
remove_copy()? 拷貝不等于某值的元素到另一個序列。
remove_copy_if() 拷貝符合條件的到另一個序列。

填充和生成:
fill()
fill_n() 填充序列中的n個元素。
generate()為序列中的每個元素調(diào)用gen()函數(shù)。

排列:
next_permuttion() 后一個排列。
prev_permutation()

partition() 劃分,將滿足條件的元素移動到序列的前面。
stable_partition()

查找和替換:
find()
binary_search() 在一個已經(jīng)有順序的序列上查找。
find_if()
search() 檢查第二個序列是否在第一個序列中出現(xiàn),且順序相同。

刪除:注意必須調(diào)用erase()來真正刪除
remove()
unique()刪除相鄰重復(fù)元素,最好現(xiàn)排序。

合并序列:
merge()

數(shù)值算法:
accumulate() 對序列的每個元素進(jìn)行運(yùn)算后求和。
transform() 也可以對每個元素進(jìn)行運(yùn)算。
計數(shù):
size()總個數(shù)。
count()等于某值的元素個數(shù)。

adjacent_difference 序列中的后一個減前與他相鄰的前一個得到新的序列。

adiacent_find

五?? 所有的算法:

???? accumlate iterator 對標(biāo)志的序列中的元素之和,加到一個由 init 指定的初始值上。重載的版本不再做加法,而是傳進(jìn)來的二元操作符被應(yīng)用到元素上。
adjacent_different
:創(chuàng)建一個新序列,該序列的每個新值都代表了當(dāng)前元素與上一個元素的差。重載版本用指定的二元操作計算相鄰元素的差。
adjacent_find
:在 iterator 對標(biāo)志的元素范圍內(nèi),查找一對相鄰的重復(fù)元素,如果找到返回一個 ForwardIterator ,指向這對元素的第一個元素。否則返回 last 。重載版本使用輸入的二元操作符代替相等的判斷。
binary_search
:在有序序列中查找 value ,如果找到返回 true 。重載的版本使用指定的比較函數(shù)對象或者函數(shù)指針來判斷相等。
copy
:復(fù)制序列。
copy_backward
:除了元素以相反的順序被拷貝外,別的和 copy 相同。
count
:利用等于操作符,把標(biāo)志范圍類的元素與輸入的值進(jìn)行比較,并返回相等元素的個數(shù)。
count_if
:對于標(biāo)志范圍類的元素,應(yīng)用輸入的操作符,并返回結(jié)果為 true 的次數(shù)。
equal
:如果兩個序列在范圍內(nèi)的元素都相等,則 equal 返回 true 。重載版本使用輸入的操作符代替了默認(rèn)的等于操作符。
equal_range
:返回一對 iterator ,第一個 iterator 表示由 lower_bound 返回的 iterator ,第二個表示由 upper_bound 返回的 iterator 值。
fill
:將輸入的值的拷貝賦給范圍內(nèi)的每個元素。
fill_n
:將輸入的值賦值給 first frist+n 范圍內(nèi)的元素。
find
:利用底層元素的等于操作符,對范圍內(nèi)的元素與輸入的值進(jìn)行比較。當(dāng)匹配時,結(jié)束搜索,返回該元素的一個 InputIterator 。
find_if
:使用輸入的函數(shù)替代了等于操作符執(zhí)行了 find 。
find_end
:在范圍內(nèi)查找“由輸入的另外一個 iterator 對標(biāo)志的第二個序列”的最后一次出現(xiàn)。重載版本中使用了用戶輸入的操作符替代等于操作。
find_first_of
:在范圍內(nèi)查找“由輸入的另外一個 iterator 對標(biāo)志的第二個序列”中的任意一個元素的第一次出現(xiàn)。重載版本中使用了用戶自定義的操作符。
for_each
:依次對范圍內(nèi)的所有元素執(zhí)行輸入的函數(shù)。
generate
:通過對輸入的函數(shù) gen 的連續(xù)調(diào)用來填充指定的范圍。
generate_n
:填充 n 個元素。
includes
:判斷 [first1, last1) 的一個元素是否被包含在另外一個序列中。使用底層元素的 <= 操作符,重載版本使用用戶輸入的函數(shù)。
inner_product
:對兩個序列做內(nèi)積 ( 對應(yīng)的元素相乘,再求和 ) ,并將內(nèi)積加到一個輸入的的初始值上。重載版本使用了用戶定義的操作。
inner_merge
:合并兩個排過序的連續(xù)序列,結(jié)果序列覆蓋了兩端范圍,重載版本使用輸入的操作進(jìn)行排序。
iter_swap
:交換兩個 ForwardIterator 的值。
lexicographical_compare
:比較兩個序列。重載版本使用了用戶自定義的比較操作。
lower_bound
:返回一個 iterator ,它指向在范圍內(nèi)的有序序列中可以插入指定值而不破壞容器順序的第一個位置。重載函數(shù)使用了自定義的比較操作。
max
:返回兩個元素中的較大的一個,重載版本使用了自定義的比較操作。
max_element
:返回一個 iterator ,指出序列中最大的元素。重載版本使用自定義的比較操作。
min
:兩個元素中的較小者。重載版本使用自定義的比較操作。
min_element
:類似與 max_element ,不過返回最小的元素。
merge
:合并兩個有序序列,并存放到另外一個序列中。重載版本使用自定義的比較。
mismatch
:并行的比較兩個序列,指出第一個不匹配的位置,它返回一對 iterator ,標(biāo)志第一個不匹配的元素位置。如果都匹配,返回每個容器的 last 。重載版本使用自定義的比較操作。
next_permutation
:取出當(dāng)前范圍內(nèi)的排列,并將其重新排序為下一個排列。重載版本使用自定義的比較操作。
nth_element
:將范圍內(nèi)的序列重新排序,使所有小于第 n 個元素的元素都出現(xiàn)在它前面,而大于它的都出現(xiàn)在后面,重載版本使用了自定義的比較操作。
partial_sort
:對整個序列做部分排序,被排序元素的個數(shù)正好可以被放到范圍內(nèi)。重載版本使用自定義的比較操作。
partial_sort_copy
:與 partial_sort 相同,除了將經(jīng)過排序的序列復(fù)制到另外一個容器。
partial_sum
:創(chuàng)建一個新的元素序列,其中每個元素的值代表了范圍內(nèi)該位置之前所有元素之和。重載版本使用了自定義操作替代加法。
partition
:對范圍內(nèi)元素重新排序,使用輸入的函數(shù),把計算結(jié)果為 true 的元素都放在結(jié)果為 false 的元素之前。
prev_permutation
:取出范圍內(nèi)的序列并將它重新排序為上一個序列。如果不存在上一個序列則返回 false 。重載版本使用自定義的比較操作。
random_shuffle
:對范圍內(nèi)的元素隨機(jī)調(diào)整次序。重載版本輸入一個隨機(jī)數(shù)產(chǎn)生操作。
remove
:刪除在范圍內(nèi)的所有等于指定的元素,注意,該函數(shù)并不真正刪除元素。內(nèi)置數(shù)組不適合使用 remove remove_if 函數(shù)。
remove_copy
:將所有不匹配的元素都復(fù)制到一個指定容器,返回的 OutputIterator 指向被拷貝的末元素的下一個位置。
remove_if
:刪除所有范圍內(nèi)輸入操作結(jié)果為 true 的元素。
remove_copy_if
:將所有不匹配的元素拷貝到一個指定容器。
replace
:將范圍內(nèi)的所有等于 old_value 的元素都用 new_value 替代。
replace_copy
:與 replace 類似,不過將結(jié)果寫入另外一個容器。
replace_if
:將范圍內(nèi)的所有操作結(jié)果為 true 的元素用新值替代。
replace_copy_if
:類似與 replace_if ,不過將結(jié)果寫入另外一個容器。
reverse
:將范圍內(nèi)元素重新按反序排列。
reverse_copy
:類似與 reverse ,不過將結(jié)果寫入另外一個容器。
rotate
:將范圍內(nèi)的元素移到容器末尾,由 middle 指向的元素成為容器第一個元素。
rotate_copy
:類似與 rotate ,不過將結(jié)果寫入另外一個容器。
search
:給出了兩個范圍,返回一個 iterator ,指向在范圍內(nèi)第一次出現(xiàn)子序列的位置。重載版本使用自定義的比較操作。
search_n
:在范圍內(nèi)查找 value 出現(xiàn) n 次的子序列。重載版本使用自定義的比較操作。
set_difference
:構(gòu)造一個排過序的序列,其中的元素出現(xiàn)在第一個序列中,但是不包含在第二個序列中。重載版本使用自定義的比較操作。
set_intersection
:構(gòu)造一個排過序的序列,其中的元素在兩個序列中都存在。重載版本使用自定義的比較操作。
set_symmetric_difference
:構(gòu)造一個排過序的序列,其中的元素在第一個序列中出現(xiàn),但是不出現(xiàn)在第二個序列中。重載版本使用自定義的比較操作。
set_union
:構(gòu)造一個排過序的序列,它包含兩個序列中的所有的不重復(fù)元素。重載版本使用自定義的比較操作。
sort
:以升序重新排列范圍內(nèi)的元素,重載版本使用了自定義的比較操作。
stable_partition
:與 partition 類似,不過它不保證保留容器中的相對順序。
stable_sort
:類似與 sort ,不過保留相等元素之間的順序關(guān)系。
swap
:交換存儲在兩個對象中的值。
swap_range
:將在范圍內(nèi)的元素與另外一個序列的元素值進(jìn)行交換。
transform
:將輸入的操作作用在范圍內(nèi)的每個元素上,并產(chǎn)生一個新的序列。重載版本將操作作用在一對元素上,另外一個元素來自輸入的另外一個序列。結(jié)果輸出到指定的容器。
unique
:清除序列中重復(fù)的元素,和 remove 類似,它也不能真正的刪除元素。重載版本使用了自定義的操作。
unique_copy
:類似與 unique ,不過它把結(jié)果輸出到另外一個容器。
upper_bound
:返回一個 iterator ,它指向在范圍內(nèi)的有序序列中插入 value 而不破壞容器順序的最后一個位置,該位置標(biāo)志了一個大于 value 的值。重載版本使用了輸入的比較操作。
堆算法: C++ 標(biāo)準(zhǔn)庫提供的是 max-heap 。一共由以下 4 個泛型堆算法。
make_heap
:把范圍內(nèi)的元素生成一個堆。重載版本使用自定義的比較操作。
pop_heap
:并不是真正的把最大元素從堆中彈出,而是重新排序堆。它把 first last-1 交換,然后重新做成一個堆。可以使用容器的 back 來訪問被“彈出“的元素或者使用 pop_back 來真正的刪除。重載版本使用自定義的比較操作。
push_heap
:假設(shè) first last-1 是一個有效的堆,要被加入堆的元素在位置 last-1 ,重新生成堆。在指向該函數(shù)前,必須先把元素插入容器后。重載版本使用指定的比較。
sort_heap
:對范圍內(nèi)的序列重新排序,它假設(shè)該序列是個有序的堆。重載版本使用自定義的比較操作。

接下來: STL容器學(xué)習(xí)

posted on 2007-03-14 16:04 夢在天涯 閱讀(11801) 評論(2)  編輯 收藏 引用 所屬分類: CPlusPlus

評論

# re: STL算法學(xué)習(xí) 2007-03-15 09:19 Galaxy_Yang

不錯, 還不熟悉STL的函數(shù)對象啊,
看來, 在以后的工作中要多熟悉sTL的算法了

很好, 支持這樣的總結(jié)!  回復(fù)  更多評論   

# re: STL算法學(xué)習(xí)[未登錄] 2008-12-19 21:02 熊哥

very good!  回復(fù)  更多評論   

公告

EMail:itech001#126.com

導(dǎo)航

統(tǒng)計

  • 隨筆 - 461
  • 文章 - 4
  • 評論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1812196
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美一区二区网站| 欧美一区二区三区免费视频| 美日韩在线观看| 亚洲人午夜精品| 亚洲激情在线观看| 国产精品国产三级国产专播精品人| 一本色道久久综合狠狠躁的推荐| 亚洲精品中文字幕在线| 欧美日韩中字| 久久久精品免费视频| 美日韩免费视频| 亚洲欧美日本另类| 久久精品国语| 一本色道久久99精品综合| 亚洲欧美精品在线观看| 亚洲高清久久| 一本一道久久综合狠狠老精东影业| 国产麻豆综合| 欧美激情中文字幕在线| 国产精品福利在线| 蜜乳av另类精品一区二区| 欧美日韩高清区| 久久久久久高潮国产精品视| 欧美精品在线观看91| 久久精品91久久久久久再现| 欧美成人中文字幕| 欧美韩日亚洲| 久久久999精品视频| 日韩视频精品在线| 性久久久久久久久久久久| 亚洲精品小视频在线观看| 亚洲欧美国产不卡| 一区二区高清视频| 噜噜噜噜噜久久久久久91| 午夜精品成人在线视频| 欧美xxx成人| 麻豆精品一区二区av白丝在线| 欧美三区在线视频| 91久久精品国产91久久性色tv| 国产一区二区三区久久精品| 亚洲视频你懂的| 日韩午夜精品| 欧美成人精品h版在线观看| 久久精品成人一区二区三区 | 久久久久久国产精品一区| 欧美喷水视频| 亚洲第一中文字幕在线观看| 国产麻豆日韩| 亚洲视频免费| 亚洲欧美国产制服动漫| 欧美剧在线观看| 欧美国产日韩精品| 在线免费观看日本欧美| 欧美在线网址| 久久久久久高潮国产精品视| 国产精品永久免费观看| 亚洲午夜在线视频| 午夜精品视频在线观看| 欧美视频在线一区| 一区二区三区四区在线| 中文久久乱码一区二区| 欧美日韩国产精品专区| 最新国产成人在线观看| 99国内精品久久| 欧美另类女人| 亚洲亚洲精品在线观看 | 亚洲午夜久久久久久久久电影院| 欧美精品v日韩精品v韩国精品v| 亚洲国产精品va在线看黑人动漫| 亚洲高清视频一区| 欧美福利网址| 一本久道久久综合狠狠爱| 亚洲一区视频在线| 国产精品亚洲综合久久| 午夜精品区一区二区三| 久久久久久久综合狠狠综合| 伊人成人在线| 欧美激情国产日韩| 一区二区国产日产| 欧美在线网站| 亚洲电影免费观看高清| 欧美久久久久久久久| 亚洲线精品一区二区三区八戒| 久久爱www久久做| 在线播放中文一区| 欧美日韩一二三四五区| 午夜在线a亚洲v天堂网2018| 免费成人黄色| 亚洲一二三区在线| 国内精品美女av在线播放| 免费亚洲电影在线| 亚洲午夜精品福利| 伊人久久久大香线蕉综合直播| av72成人在线| 久久美女性网| 99在线精品视频在线观看| 国产精品亚洲а∨天堂免在线| 久久精品一二三区| av成人国产| 欧美成人a视频| 亚洲欧美精品中文字幕在线| 在线观看欧美日韩国产| 国产精品久久久久aaaa| 麻豆国产va免费精品高清在线| 99热免费精品| 欧美激情麻豆| 久久久亚洲国产天美传媒修理工| 夜夜爽www精品| 狠狠色噜噜狠狠色综合久 | 久久精品国产免费| 亚洲伦伦在线| 噜噜爱69成人精品| 午夜精品久久久久久久| 亚洲精品小视频在线观看| 国产一区二区三区在线观看视频| 欧美日韩在线看| 欧美国产高清| 乱人伦精品视频在线观看| 欧美一区二区三区播放老司机| 夜夜嗨av一区二区三区中文字幕 | 久热精品在线| 欧美一区91| 一区二区三区黄色| 亚洲人成77777在线观看网| 国模套图日韩精品一区二区| 国产精品美女在线观看| 欧美日韩中文字幕日韩欧美| 欧美黄色aaaa| 欧美成ee人免费视频| 老鸭窝毛片一区二区三区| 性伦欧美刺激片在线观看| 亚洲一区二区三区777| 一卡二卡3卡四卡高清精品视频| 亚洲激情第一区| 亚洲激情亚洲| 91久久在线视频| 91久久嫩草影院一区二区| 欧美黑人多人双交| 欧美激情视频在线免费观看 欧美视频免费一| 久久精品女人的天堂av| 久久精品视频va| 久久久天天操| 欧美/亚洲一区| 欧美国产亚洲视频| 亚洲东热激情| 亚洲精品视频免费在线观看| 亚洲欧洲一区二区天堂久久| 日韩小视频在线观看| 亚洲精品日日夜夜| 亚洲午夜女主播在线直播| 亚洲视频www| 欧美一区2区视频在线观看| 久久久国产精品一区| 蜜桃伊人久久| 欧美日韩伦理在线| 国产精品国产三级国产专区53 | 久久成人羞羞网站| 久久夜色精品国产噜噜av| 欧美.www| 在线亚洲精品福利网址导航| 亚洲午夜在线视频| 久久精品国产清高在天天线| 国产伦精品一区二区三区视频黑人 | 国产精品午夜国产小视频| 国产一区二区三区av电影 | 亚洲三级免费观看| 亚洲特级片在线| 久久爱www| 亚洲国产免费| 亚洲欧美在线x视频| 久久手机免费观看| 欧美日韩一区二区三区免费| 国产欧美一区二区精品秋霞影院| 伊人久久综合97精品| 一区二区三区www| 久久久人成影片一区二区三区 | 免费不卡在线观看av| 亚洲精品一级| 久久精品最新地址| 欧美日韩在线一区二区三区| 国产日韩亚洲欧美综合| 亚洲人成毛片在线播放| 欧美在线三区| 亚洲精品一区二区三区樱花 | 日韩午夜免费| 老司机成人在线视频| 欧美性理论片在线观看片免费| 韩国自拍一区| 午夜精品国产更新| 最近中文字幕日韩精品| 欧美中文字幕在线| 国产精品久久久999| 亚洲精品看片| 欧美成人午夜免费视在线看片| 亚洲永久在线| 欧美三级视频在线| 亚洲精品影视| 欧美电影免费观看网站| 欧美在线看片a免费观看| 欧美性大战久久久久久久蜜臀|