天天看點

C++标準庫算法簡介

算法簡介

  标準庫定義了 100多個算法,要學習如何使用它們,需要了解它們的結構,而不是記住每個算法的細節

  ( 1)查找對象的算法:

  find(beg,end,val)

  count(beg,end,val)

  find_if(beg,end,unaryPred)

  count_if(beg,end,unaryPred)

  find_first_of(beg1,end1,beg2,end2)

  find_first_of(beg1,end1,beg2,end2,binaryPred)

  find_end(beg1,end1,beg2,end2)

  find_end(beg1,end1,beg2,end2,binaryPred)

  adjacent_find(beg,end)

  adjacent_find(beg,end,binaryPred)

  search(beg1,end1,beg2,end2)

  search(beg1,end1,beg2,end2,binaryPred)

  search_n(beg,end,count,val)

  search_n(beg,end,count,val,binaryPred)

  ( 2)其他隻讀算法:

  for_each(beg,end,f)

  mismatch(beg1,end1,beg2)

  mismatch(beg1,end1,beg2,binaryPred)

  equal(beg1,end1,beg2)

  equal(beg1,end1,beg2,binaryPred)

  ( 3)二分查找算法:

  lower_bound(beg,end,val)

  lower_bound(beg,end,val,comp)

  upper_bound(beg,end,val)

  upper_bound(beg,end,val,comp)

  equal_range(beg,end,val)

  equal_range(beg,end,val,comp)

  binary_search(beg,end,val)

  binary_search(beg,end,val,comp)

  ( 4)寫容器元素的算法:

  fill_n(dest,cnt,val)

  generate_n(dest,cnt,Gen)

  copy(beg,end,dest)

  transform(beg,end,dest,unaryOp)

  transform(beg,end,beg2,dest,binaryOp)

  replace_copy(beg,end,dest,old_val,new_val)

  replace_copy_if(beg,and,dest,unaryPred,new_val)

  merge(beg1,end1,beg2,end2,dest)

  merge(beg1,end1,beg2,end2,dest,comp)

  swap(elem1,elem2)

  iter_swap(iter1,iter2)

  swap_ranges(beg1,end1,beg2)

  fill(beg,end,val)

  generate(beg,end,Gen)

  replace(beg,end,old_val,new_val)

  replace_if(beg,end,unaryPred,new_val)

  copy_backward(beg,end,dest)

  inplace_merge(beg,mid,end)

  inplace_merge(beg,mid,end,comp)

  ( 5)劃分與排序算法:

  stable_partition(beg,end,unaryPred)

  partition(beg,end,unaryPred)

  sort(beg,end)

  stable_sort(beg,end)

  sort(beg,end,comp)

  stable_sort(beg,end,comp)

  partial_sort(beg,mid,end)

  partial_sort(beg,mid,end,comp)

  partial_sort_copy(beg,end,destBeg,destEnd)

  partial_sort_copy(beg,end,destBeg,destEnd,comp)

  nth_element(beg,nth,end)

  nth_element(beg,nth,end,comp)

  ( 6)通用重新排序算法:

  remove(beg,end,val)

  remove_if(beg,end,unaryPred)

  unique(beg,end)

  unique(beg,end,binaryPred)

  rotate(beg,mid,end)

  reverse(beg,end)

  reverse_copy(beg,end,dest)

  remove_copy(beg,end,dest,val)

  remove_copy_if(beg,end,dest,unaryPred)

  unique_copy(beg,end,dest)

  unique_copy(beg,end,dest,binaryPred)

  rotate_copy(beg,mid,end,dest)

  random_shuffle(beg,end)

  random_shuffle(beg,end,rand)

  ( 7)排列算法:

  next_permutation(beg,end)

  next_permutation(beg,end,comp)

  prev_permutation(beg,end)

  prev_permutation(beg,end,comp)

  ( 8)有序序列的集合算法:

  includes(beg,end,beg2,end2)

  includes(beg,end,beg2,end2,comp)

  set_union(beg,end,beg2,end2,dest)

  set_union(beg,end,beg2,end2,dest,comp)

  set_intersection(beg,end,beg2,end2,dest)

  set_intersection(beg,end,beg2,end2,dest,comp)

  set_difference(beg,end,beg2,end2,dest)

  set_difference(beg,end,beg2,end2,dest,comp)

  set_symmetric_difference(beg,end,beg2,end2,dest)

  set_symmetric_difference(beg,end,beg2,end2,dest,comp)

  (8)最大值和最小值算法:

  min(va1,va2)

  min(val1,val2,comp)

  max(val1,val2)

  max(val1,val2,comp)

  min_element(beg,end)

  min_element(beg,end,comp)

  max_element(beg,end)

  max_element(beg,end,comp)

  lexicographical_compare(beg1,end1,beg2,end2)

  lexicographical_compare(beg1,end1,beg2,end2,comp)

  ( 10)算術算法:在 中

  accumulate(beg,end,init)

  accumulate(beg,end,init,BinaryOp)

  inner_product(beg1,end1,beg2,init)

  inner_product(beg1,end1,beg2,init,BinOp1,BinOp2)

  partial_sum(beg,end,dest)

  partial_sum(beg,end,dest,BinaryOp)

  adjacent_difference(beg,end,dest)

  adjacent_difference(beg,end,dest,BinaryOp)

  總結:

  查找對象的算法、其他隻讀算法、二分查找算法、寫容器元素的算法、劃分與排序算法、通用重新排序算法、排列算法、有序序列的集合算法、最大值和最小值算法、算術算法

   再談 IO 庫

  iostream中定義的操縱符: boolalpha,noboolalpha,showbase,noshowbase,showpoint,noshowpoint,showpos,noshowpos,uppercase,nouppercase,dec,hex,oct,left,right,internal,fixed,scientific,flush,ends,endl,unitbuf,nounitbuf,skipws,noskipws,ws

  iomanip中定義的操縱符: setfill(ch),setprecision(n),setw(w),setbase(b)

  改變流格式狀态的操縱符通常為後續 IO保留改變後的格式狀态

  取消操縱符的任何狀态改變通常是最好的。一般而言,流應該在每個 IO操作之後處于通常的預設狀态

  用 flags操作恢複格式狀态: flags()傳回流的目前格式狀态,傳回值是名為 fmtflags的标準庫類型。 flags(arg)将流格式置為指定格式

  控制輸出格式:有兩大類,控制數值的表示,控制填充符的數量和布局

  單位元組低級 IO操作: is.get(ch),os.put(ch),is.get(),is.putback(ch),is.unget(),is.peek()

  檔案結束符: EOF,在 中定義

  多位元組操作: is.get(sink,size,delim),is.getline(sink,size,delim),is.read(sink,size),is.gcount(),os.write(source,size),is.ignore(size,delim)

  流的随機通路:函數 seekg,tellg,seekp,tellp。

  普通 iostream對象一般不允許随機通路

  在大多數系統上,綁定到 cin,cout,cerr和 clog的流不支援随機通路。随機通路特性常用于 fstream和 sstream。

繼續閱讀