Microsoft KB Archive/156300

= STL Sample for the count_if Function =

Article ID: 156300

Article Last Modified on 6/23/2005

-

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 Q156300

<div class="summary_section">

SUMMARY
The sample code below illustrates how to use the count_if, begin, and end STL function in Visual C++.

<div class="moreinformation_section">

Prototype
template<class InputIterator, class Predicate> inline size_t count_if(InputIterator first, InputIterator last,                             Predicate P) NOTE: The class/parameter names in the prototype do not match the version in the header file. Some have been modified to improve readability.

Description
The count_if algorithm counts the number of elements in the range [first, last) that cause the predicate to return true, and returns the number of elements for which the predicate was true.

Sample Code
////////////////////////////////////////////////////////////////////// // // Compile options needed: /GX // // count.cpp : Illustrates how to use the count_if function. // // Functions: // //  count_if  - Count items in a range that satisfy a predicate. // //  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)

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

// Return true if string str starts with letter 'S' int MatchFirstChar( const string& str) {   string s("S") ; return s == str.substr(0,1) ; }

void main {   const int VECTOR_SIZE = 8 ;

// Define a template class vector of strings typedef vector<string, allocator > StringVector ;

//Define an iterator for template class vector of strings typedef StringVector::iterator StringVectorIt ;

StringVector NamesVect(VECTOR_SIZE) ;  //vector containing names

StringVectorIt start, end, it ;

int result = 0 ;  // stores count of elements // that match value.

// Initialize vector NamesVect NamesVect[0] = "She" ; NamesVect[1] = "Sells" ; NamesVect[2] = "Sea" ; NamesVect[3] = "Shells" ; NamesVect[4] = "by" ; NamesVect[5] = "the" ; NamesVect[6] = "Sea" ; NamesVect[7] = "Shore" ;

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

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

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

// Count the number of elements in the range [first, last +1)   // that start with letter 'S'    result = count_if(start, end, MatchFirstChar) ;

// print the count of elements that start with letter 'S'   cout << "Number of elements that start with letter \"S\" = " << result << endl ; } Output:

NamesVect { She Sells Sea Shells by the Sea Shore }

Number of elements that start with letter "S" = 6

<div class="references_section">