Microsoft KB Archive/157560

= STL Sample for the merge Function =

Article ID: 157560

Article Last Modified on 12/2/2003

-

APPLIES TO

 The Standard C++ Library, when used with:  Microsoft Visual C++ 4.2 Professional Edition

 Microsoft Visual C++ 4.2 Enterprise Edition

 Microsoft Visual C++ 5.0 Learning Edition 

-

<div class="notice_section">

This article was previously published under Q157560

<div class="summary_section">

SUMMARY
The sample code below illustrates how to use the merge STL function in Visual C++.

<div class="moreinformation_section">

Prototype
template<class InputIterator1, class InputIterator2, class OutputIterator> inline OutputIterator merge( InputIterator1 first1,                        InputIterator1 last1,                         InputIterator2 first2,                         InputIterator2 last2                         OutputIterator result ) 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 merge algorithm merges two sorted sequences: [first1..last1) and [first2..last2) into a single sorted sequence starting at result.

This version assumes that the ranges [first1..last1) and [first2..last2) are sorted using operator<. If both ranges contain equal values, the value from the first range will be stored first.

The result of merging overlapping ranges is undefined.

Sample Code
////////////////////////////////////////////////////////////////////// // // Compile options needed: /GX // // merge.cpp : Illustrates how to use the merge //                    function. // // Functions: // //   merge : Merge two sorted sequences //           into a single sorted list. // // 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)

using namespace std;
 * 1) include
 * 2) include
 * 3) include
 * 4) include
 * 5) include

void main {   const int MAX_ELEMENTS = 8 ;

// Define a template class vector of int typedef vector<int, allocator > IntVector ;

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

IntVector NumbersVector(MAX_ELEMENTS) ;

IntVectorIt startv, endv, itv ;

// Define a template class list of int typedef list<int, allocator > IntList ;

//Define an iterator for template class list of ints typedef IntList::iterator IntListIt ;

IntList NumbersList ;

IntListIt first, last, itl ;

// Define a template class deque of int typedef deque<int, allocator > IntDeque ;

//Define an iterator for template class deque of ints

typedef IntDeque::iterator IntDequeIt ;

IntDeque NumbersDeque(2 * MAX_ELEMENTS) ;

IntDequeIt itd ;

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

startv = NumbersVector.begin ;  // location of first // element of NumbersVector

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

// sort NumbersVector, merge requires the sequences // to be sorted sort(startv, endv) ;

// print content of NumbersVector cout << "NumbersVector { " ; for(itv = startv; itv != endv; itv++) cout << *itv << " " ; cout << " }\n" << endl ;

// Initialize vector NumbersList for(int i = 0; i < MAX_ELEMENTS; i++) NumbersList.push_back(i) ;

first = NumbersList.begin ;  // location of first // element of NumbersList

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

// print content of NumbersList cout << "NumbersList { " ; for(itl = first; itl != last; itl++) cout << *itl << " " ; cout << " }\n" << endl ;

// merge the elements of NumbersVector // and NumbersList and place the // results in NumbersDeque merge(startv, endv, first, last, NumbersDeque.begin) ;

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

// print content of NumbersDeque cout << "NumbersDeque { " ; for(itd = NumbersDeque.begin;       itd != NumbersDeque.end; itd++) cout << *itd << " " ; cout << " }\n" << endl ; }

Program Output is:

NumbersVector { 4 10 10 30 69 70 96 100 }

NumbersList { 0 1 2 3 4 5 6 7 }

After calling merge

NumbersDeque { 0 1 2 3 4 4 5 6 7 10 10 30 69 70 96 100 }

<div class="references_section">