Microsoft KB Archive/156900

= INFO: STL Sample for the Predicate Version of inplace_merge Function =

Article ID: 156900

Article Last Modified on 12/10/2003

-

APPLIES TO


 * Microsoft Visual C++ 4.2 Enterprise Edition
 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 4.2 Professional Edition
 * Microsoft Visual C++ 5.0 Professional Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition
 * Microsoft Visual C++ .NET 2002 Standard Edition
 * Microsoft Visual C++ .NET 2003 Standard Edition

-



This article was previously published under Q156900



NOTE: Microsoft Visual C++ NET (2002) supported both the managed code model that is provided by the .NET Framework and the unmanaged native Windows code model. The information in this article applies to unmanaged Visual C++ code only.



SUMMARY
The sample code below illustrates how to use the predicate version of the inplace_merge STL function and the begin and end functions in Visual C++.



Prototype
template inline

void inplace_merge(BidirectionalIterator first,                         BidirectionalIterator middle,                          BidirectionalIterator last,                          Compare compare) NOTE: The class/parameter names in the prototype do not match the original version in the header file. They have been modified to improve readability.

Description
The inplace_merge algorithm merges two sorted sub-sequences: [first..middle) and [middle..last) in place into a single sorted sequence [first..last). This version assumes that the ranges [first..middle) and [middle..last) are sorted using the compare function. If both ranges contain equal values, the value from the first range will be stored first.

Sample Code
////////////////////////////////////////////////////////////////////// // // Compile options needed: /GX // // inplace_mergeP.cpp : Illustrates how to use the predicate version of //                     the inplace_merge function. // // Functions: // //   inplace_merge - Merge two sorted sub-sequences in place into a //                    single sorted list using the compare function. // //   begin - Returns an iterator that points to the first element in a //            sequence.

//   end - Returns an iterator that points one past the end of a sequence. // // Written by Kalindi Sanghrajka // of Microsoft Product Support Services, // Software Core Developer Support. // Copyright (c) 1996 Microsoft Corporation. All rights reserved. //////////////////////////////////////////////////////////////////////

// disable warning C4786: symbol greater than 255 character, // okay to ignore


 * 1) pragma warning(disable: 4786)


 * 1) include
 * 2) include
 * 3) include
 * 4) include

using namespace std; // std c++ libs implemented in std #endif
 * 1) if _MSC_VER > 1020  // if VC++ version is > 4.2

void main

{

const int VECTOR_SIZE = 8 ;

// Define a template class vector of int typedef vector IntVector ;

//Define an iterator for template class vector of strings typedef IntVector::iterator IntVectorIt ;

IntVector Numbers(VECTOR_SIZE) ;

IntVectorIt start, end, it ;

// Initialize vector Numbers Numbers[0] = 4 ; Numbers[1] = 10; Numbers[2] = 70 ; Numbers[3] = 10 ; Numbers[4] = 30 ; Numbers[5] = 69 ; Numbers[6] = 96 ; Numbers[7] = 100;

start = Numbers.begin ;  // location of first // element of Numbers

end = Numbers.end ;      // one past the location // last element of Numbers

cout << "Before calling inplace_merge\n" << endl ;

// print content of Numbers cout << "Numbers { " ; for(it = start; it != end; it++) cout << *it << " " ; cout << " }\n" << endl ;

//merge the elements of Numbers in place inplace_merge(start, start + 3, end, less ) ;

cout << "After calling inplace_merge\n" << endl ;

// print content of Numbers cout << "Numbers { " ; for(it = start; it != end; it++) cout << *it << " " ; cout << " }\n" << endl ;

} Program Output is: Before calling inplace_merge

Numbers { 4 10 70 10 30 69 96 100 }

After calling inplace_merge

Numbers { 4 10 10 30 69 70 96 100 }

