C++ステップアップ:STLアルゴリズム14--交換

3013 ワード

1.概要
関数#カンスウ#
さぎょう
ドキュメントswap(a,b) abに格納された値を交換します.
swap() swap_ranges(beg1,end1,beg2)
[beg1,end1]内の元素[beg2,beg2+end1-beg1)の元素値を交換する.
swap_ranges() iter_swap(it_a,it_b)
2つのForwardIteratorの値を交換します.
iter_swap()
2.サンプルコード
  • swap
  • // swap algorithm example (C++98)
    #include      // std::cout
    #include     // std::swap
    #include        // std::vector
    
    int main () {
    
      int x=10, y=20;                              // x:10 y:20
      std::swap(x,y);                              // x:20 y:10
    
      std::vector foo (4,x), bar (6,y);       // foo:4x20 bar:6x10
      std::swap(foo,bar);                          // foo:6x10 bar:4x20
    
      std::cout << "foo contains:";
      for (std::vector::iterator it=foo.begin(); it!=foo.end(); ++it)
        std::cout << ' ' << *it;
      std::cout << '
    '; return 0; }
  • swap_ranges
  • // swap_ranges example
    #include      // std::cout
    #include     // std::swap_ranges
    #include        // std::vector
    
    int main () {
      std::vector foo (5,10);        // foo: 10 10 10 10 10
      std::vector bar (5,33);        // bar: 33 33 33 33 33
    
      std::swap_ranges(foo.begin()+1, foo.end()-1, bar.begin());
    
      // print out results of swap:
      std::cout << "foo contains:";
      for (std::vector::iterator it=foo.begin(); it!=foo.end(); ++it)
        std::cout << ' ' << *it;
      std::cout << '
    '; std::cout << "bar contains:"; for (std::vector::iterator it=bar.begin(); it!=bar.end(); ++it) std::cout << ' ' << *it; std::cout << '
    '; return 0; }
  • iter_swap
  • // iter_swap example
    #include      // std::cout
    #include     // std::iter_swap
    #include        // std::vector
    
    int main () {
    
      int myints[]={10,20,30,40,50 };              //   myints:  10  20  30  40  50
      std::vector myvector (4,99);            // myvector:  99  99  99  99
    
      std::iter_swap(myints,myvector.begin());     //   myints: [99] 20  30  40  50
                                                   // myvector: [10] 99  99  99
    
      std::iter_swap(myints+3,myvector.begin()+2); //   myints:  99  20  30 [99] 50
                                                   // myvector:  10  99 [40] 99
    
      std::cout << "myvector contains:";
      for (std::vector::iterator it=myvector.begin(); it!=myvector.end(); ++it)
        std::cout << ' ' << *it;
      std::cout << '
    '; return 0; }

    3.練習
  • 交換関数を用いてバブルソート
  • を実現する.