Skip to content. Skip to navigation

ICTP Portal

Sections
You are here: Home Manuals on-line PGI Compiler pgC_lib search, search_n
Personal tools
Document Actions

search, search_n



Click on the banner to return to the class reference home page.

search, search_n


Algorithm

Summary

Finds a sub-sequence within a sequence of values that is element-wise equal to the values in an indicated range.

Data Type and Member Function Indexes
(exclusive of constructors and destructors)

None

Synopsis

#include <algorithm>

template <class ForwardIterator1, class ForwardIterator2>
 ForwardIterator1 search (ForwardIterator1 first1,
                          ForwardIterator1 last1,
                          ForwardIterator2 first2,
                          ForwardIterator2 last2);

template <class ForwardIterator1,
          class ForwardIterator2,
          class BinaryPredicate>
 ForwardIterator1 search (ForwardIterator1 first1,
                          ForwardIterator1 last1,
                          ForwardIterator2 first2,
                          ForwardIterator2 last2,
                          BinaryPredicate binary_pred);

template <class ForwardIterator, 
          class Size, 
          class T>
ForwardIterator search_n (ForwardIterator first, 
                          ForwardIterator last,
                          Size count, const T& value);

template <class ForwardIterator, 
          class Size, 
          class T, 
          class BinaryPredicate>
ForwardIterator search_n (ForwardIterator first, 
                          ForwardIterator last,
                          Size count, const T& value,
                          BinaryPredicate pred)

Description

The search and search_n are used for searching for a sub-sequence within a sequence. The search algorithm searches for a sub-sequence [first2, last2) within a sequence [first1, last1), and returns the beginning location of the sub-sequence. If it does not find the sub-sequence, search returns last1. The first version of search uses the equality (==) operator as a default, and the second version allows you to specify a binary predicate to perform the comparison.

The search_n algorithm searches for the sub-sequence composed of count occurrences of value within a sequence [first, last), and returns first if this sub-sequence is found. If it does not find the sub-sequence, search_n returns last. The first version of search_n uses the equality (==) operator as a default, and the second version allows you to specify a binary predicate to perform the comparison.

Complexity

search performs at most (last1 - first1)*(last2-first2) applications of the corresponding predicate.

search_n performs at most (last - first) applications of the corresponding predicate.

Example

//
// search.cpp
//
 #include <algorithm>
 #include <list>
 #include <iostream.h>

 int main()
 {
   // Initialize a list sequence and 
   // sub-sequence with characters
   char seq[40] = "Here's a string with a substring in it";
   char subseq[10] = "substring";
   list<char> sequence(seq, seq+39);
   list<char> subseqnc(subseq, subseq+9);

   //Print out the original sequence
   cout << endl << "The sub-sequence, " << subseq 
        << ", was found at the ";
   cout << endl << "location identified by a '*'" 
        << endl << "     ";

   // Create an iterator to identify the location of 
   // sub-sequence within sequence
   list<char>::iterator place;

   //Do search
   place = search(sequence.begin(), sequence.end(),
                  subseqnc.begin(), subseqnc.end());

   //Identify result by marking first character with a '*'
   *place = '*';

   //Output sequence to display result
   for(list<char>::iterator i = sequence.begin(); 
           i != sequence.end(); i++)
     cout << *i;
   cout << endl;

   return 0;
 }

Output :
The sub-sequence, substring, was found at the
location identified by a '*'
     Here's a string with a *substring in it

Warning

If your compiler does not support default template parameters, then you need to always supply the Allocator template argument. For instance, you will need to write :

list<char, allocator<char> >

instead of :

list<char>


©Copyright 1996, Rogue Wave Software, Inc.


Powered by Plone This site conforms to the following standards: