The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

inplace_merge (3)
  • >> inplace_merge (3) ( Solaris man: Библиотечные вызовы )
  • 
                           Standard C++ Library
                 Copyright 1998, Rogue Wave Software, Inc.
    
    
    NAME
         inplace_merge
    
          - Merges two sorted sequences into one.
    
    
    
    SYNOPSIS
         #include <algorithm>
         template <class BidirectionalIterator>
          void inplace_merge(BidirectionalIterator first,
                             BidirectionalIterator middle,
                             BidirectionalIterator last);
    
         template <class BidirectionalIterator, class Compare>
          void inplace_merge(BidirectionalIterator first,
                             BidirectionalIterator middle,
                             BidirectionalIterator last,
                             Compare comp);
    
    
    
    DESCRIPTION
         The inplace_merge algorithm merges  two  sorted  consecutive
         ranges  [first,  middle)  and  [middle,  last), and puts the
         result of the merge into the range [first, last). The  merge
         is  stable,  which  means  that  if  the  two ranges contain
         equivalent elements,  the  elements  from  the  first  range
         always precede the elements from the second.
    
         There are two versions of the inplace_merge  algorithm.  The
         first version uses the less than operator (operator<) as the
         default for comparison, and the  second  version  accepts  a
         third argument that specifies a comparison operator.
    
    
    
    COMPLEXITY
         When enough additional memory  is  available,  inplace_merge
         does  at  most  (last  - first) - 1 comparisons. If no addi-
         tional memory is available, an algorithm with O(NlogN)  com-
         plexity (where N is equal to last-first) may be used.
    
    
    
    EXAMPLE
         //
         // merge.cpp
         //
          #include <algorithm>
          #include <vector>
          #include <functional>
          #include <iostream>
         using namespace std;
    
         int main()
          {
           int d1[4] = {1,2,3,4};
           int d2[8] = {11,13,15,17,12,14,16,18};
    
            // Set up two vectors
           vector<int> v1(d1,d1 + 4), v2(d1,d1 + 4);
    
    
            // Set up four destination vectors
           vector<int> v3(d2,d2 + 8),v4(d2,d2 + 8),
                       v5(d2,d2 + 8),v6(d2,d2 + 8);
            // Set up one empty vector
           vector<int> v7;
            // Merge v1 with v2
           merge(v1.begin(),v1.end(),v2.begin(),v2.end(),
                 v3.begin());
            // Now use comparator
           merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v4.begin(),
                 less<int>());
            // In place merge v5
           vector<int>::iterator mid = v5.begin();
           advance(mid,4);
            inplace_merge(v5.begin(),mid,v5.end());
            // Now use a comparator on v6
           mid = v6.begin();
           advance(mid,4);
            inplace_merge(v6.begin(),mid,v6.end(),less<int>());
            // Merge v1 and v2 to empty vector using insert iterator
           merge(v1.begin(),v1.end(),v2.begin(),v2.end(),
                 back_inserter(v7));
            // Copy all cout
           ostream_iterator<int,char> out(cout," ");
           copy(v1.begin(),v1.end(),out);
           cout << endl;
           copy(v2.begin(),v2.end(),out);
           cout << endl;
           copy(v3.begin(),v3.end(),out);
           cout << endl;
           copy(v4.begin(),v4.end(),out);
           cout << endl;
           copy(v5.begin(),v5.end(),out);
           cout << endl;
           copy(v6.begin(),v6.end(),out);
           cout << endl;
           copy(v7.begin(),v7.end(),out);
           cout << endl;
    
            // Merge v1 and v2 to cout
           merge(v1.begin(),v1.end(),v2.begin(),v2.end(),
                 ostream_iterator<int,char>(cout," "));
           cout << endl;
           return 0;
          }
    
    
         Program Output
    
    
    
         1 2 3 4
         1 2 3 4
         1 1 2 2 3 3 4 4
         1 1 2 2 3 3 4 4
         11 12 13 14 15 16 17 18
         11 12 13 14 15 16 17 18
         1 1 2 2 3 3 4 4
         1 1 2 2 3 3 4 4
    
    
    
    WARNINGS
         If your compiler does not support default  template  parame-
         ters,  then you always need to supply the Allocator template
         argument. For instance, you have to write:
    
         vector<int, allocator,int> >
    
         instead of:
    
         vector<int>
    
         If your compiler does not support namespaces,  then  you  do
         not need the using declaration for std.
    
    
    
    SEE ALSO
         merge
    
    
    


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру