## search_n
## Prototype
template <class ForwardIterator, class Integer, class T> ForwardIterator search_n(ForwardIterator first, ForwardIterator last, Integer count, const T& value); template <class ForwardIterator, class Integer, class T, class BinaryPredicate> ForwardIterator search_n(ForwardIterator first, ForwardIterator last, Integer count, const T& value, BinaryPredicate binary_pred); ## Description
The first version of ## DefinitionDefined in the standard header algorithm, and in the nonstandard backward-compatibility header algo.h. ## Requirements on typesFor the first version: -
`ForwardIterator` is a model of ForwardIterator. -
`Integer` is an integral type. -
`T` is a model of EqualityComparable. -
`ForwardIterator` 's value type is a model of EqualityComparable. -
Objects of
`ForwardIterator` 's value type can be compared for equality with Objects of type`T` .
For the first version: -
`ForwardIterator` is a model of ForwardIterator. -
`Integer` is an integral type. -
`T` is a model of EqualityComparable. -
`BinaryPredicate` is a model of BinaryPredicate. -
`ForwardIterator` 's value type is convertible to`BinaryPredicate` 's first argument type. -
`T` is convertible to`BinaryPredicate` 's second argument type.
## Preconditions-
`[first, last)` is a valid range. -
`count` is non-negative [1].
## ComplexityLinear. (The C++ standard permits the complexity to be ## Examplebool eq_nosign(int x, int y) { return abs(x) == abs(y); } void lookup(int* first, int* last, size_t count, int val) { cout << "Searching for a sequence of " << count << " '" << val << "'" << (count != 1 ? "s: " : ": "); int* result = search_n(first, last, count, val); if (result == last) cout << "Not found" << endl; else cout << "Index = " << result - first << endl; } void lookup_nosign(int* first, int* last, size_t count, int val) { cout << "Searching for a (sign-insensitive) sequence of " << count << " '" << val << "'" << (count != 1 ? "s: " : ": "); int* result = search_n(first, last, count, val, eq_nosign); if (result == last) cout << "Not found" << endl; else cout << "Index = " << result - first << endl; } int main() { const int N = 10; int A[N] = {1, 2, 1, 1, 3, -3, 1, 1, 1, 1}; lookup(A, A+N, 1, 4); lookup(A, A+N, 0, 4); lookup(A, A+N, 1, 1); lookup(A, A+N, 2, 1); lookup(A, A+N, 3, 1); lookup(A, A+N, 4, 1); lookup(A, A+N, 1, 3); lookup(A, A+N, 2, 3); lookup_nosign(A, A+N, 1, 3); lookup_nosign(A, A+N, 2, 3); } The output is Searching for a sequence of 1 '4': Not found Searching for a sequence of 0 '4's: Index = 0 Searching for a sequence of 1 '1': Index = 0 Searching for a sequence of 2 '1's: Index = 2 Searching for a sequence of 3 '1's: Index = 6 Searching for a sequence of 4 '1's: Index = 6 Searching for a sequence of 1 '3': Index = 4 Searching for a sequence of 2 '3's: Not found Searching for a (sign-insensitive) sequence of 1 '3': Index = 4 Searching for a (sign-insensitive) sequence of 2 '3's: Index = 4 ## Notes[1] Note that [2] The reason that this range is ## See also |