Library: Algorithms
Function
An algorithm that finds a subsequence within a sequence of values
#include <algorithm> namespace std { template <class ForwardIterator1, class ForwardIterator2> ForwardIterator1 search(ForwardIterator1 start1, ForwardIterator1 finish1, ForwardIterator2 start2, ForwardIterator2 finish2); template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> ForwardIterator1 search(ForwardIterator1 start1, ForwardIterator1 finish1, ForwardIterator2 start2, ForwardIterator2 finish2, BinaryPredicate binary_pred); template <class ForwardIterator, class Size, class T> ForwardIterator search_n(ForwardIterator start, ForwardIterator finish, Size count, const T& value); template <class ForwardIterator, class Size, class T, class BinaryPredicate> ForwardIterator search_n(ForwardIterator start ForwardIterator finish, Size count, const T& value, BinaryPredicate pred) }
The search() and search_n() algorithms search for a subsequence within a sequence. The search() algorithm searches for a subsequence [start2, finish2) within a sequence [start1, finish1), and returns the beginning location of the subsequence. If it does not find the subsequence, search() returns finish1. The first version of search() uses 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 subsequence composed of count occurrences of value within a sequence [start, finish), and returns start if this subsequence is found. If it does not find the subsequence, search_n() returns finish. The first version of search_n() uses operator==() as a default, and the second version allows you to specify a binary predicate to perform the comparison.
search() performs at most (finish1 - start1)*(finish2-start2) applications of the corresponding predicate.
search_n() performs at most (finish - start)* count applications of the corresponding predicate.
// // search.cpp // #include <algorithm> #include <list> #include <iostream> int main () { #ifndef _RWSTD_NO_NAMESPACE using namespace std; #endif // Initialize a list sequence and subsequence with // characters. char seq[40] = "Here's a string with a substring in it"; char subseq[10] = "substring"; list<char,allocator<char> > sequence(seq, seq+38); list<char,allocator<char> > subseqnc(subseq, subseq+9); // Print out the original sequence. cout << endl << "The subsequence, " << subseq << ", was found at the "; cout << endl << "location identified by a '*'" << endl << " "; // Create an iterator to identify the location of // subsequence within sequence. list<char,allocator<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,allocator<char> >::iterator i = sequence.begin(); i != sequence.end(); i++) cout << *i; cout << endl; return 0; } Program Output:
The subsequence, substring, was found at the location identified by a '*' Here's a string with a *ubstring in it
ISO/IEC 14882:1998 -- International Standard for Information Systems -- Programming Language C++, Section 25.1.9