Home »
C++ STL
std::find() with examples in C++
In this article, we are going to see how to search the position of an element within a range using STL function find()?
Submitted by Radib Kar, on July 17, 2020
find() as a STL function
find() is an STL function that comes under the <algorithm> header file which returns an iterator to the first occurrence of the searching element within a range.
Syntax:
InputIterator find(
InputIterator first,
InputIterator last,
const T& val);
Where,
- InputIterator first - iterator to start of the searching range
- InputIterator last - iterator to end of the searching range
- const T& val - value to be searched of datatype T
What is InputIterator?
Iterator to first position of the range where we find the searching element. If searching element is not found it returns iterator to the end
Return type: bool
Using the above syntax the elements in the corresponding ranges are searched whether the searching element is found.
Time complexity: Linear time, O(n)
Difference between binary_search() and find() functions
- std::binary_search() function returns Boolean telling whether it finds or not. It doesn't return the position. But, std::find() searches the position too. It returns an iterator to the first position.
- std::binary_search() searches in O(logn) time whether std::find() searches in linear time.
Example 1: When the searched element is found and have only one instance in the searching range
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> arr{ 1, 2, 3, 8, 4, 3 };
int searching_element = 8;
vector<int>::iterator it;
//starting iterator of range= arr.begin()
//end iterator of range =arr.end()
it = find(arr.begin(), arr.end(), searching_element);
if (it != arr.end())
cout << searching_element << " is at position: " << it - arr.begin() << endl;
else
cout << searching_element << "not found";
return 0;
}
Output:
8 is at position: 3
In the above program, we have checked the searching element and we found it at 3rd index(0-indexing)
Example 2: When the searched element is found and have more than one instance in the searching range
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> arr{ 1, 2, 3, 8, 4, 3 };
int searching_element = 3;
vector<int>::iterator it;
//starting iterator of range= arr.begin()
//end iterator of range =arr.end()
it = find(arr.begin(), arr.end(), searching_element);
if (it != arr.end())
cout << searching_element << " is at position: " << it - arr.begin() << endl;
else
cout << searching_element << "not found";
return 0;
}
Output:
3 is at position: 2
In the above case, we are searching 3 in the array which has two instances one at position index 2 and the other is at position 5. Since std::find() stops searching whenever it finds the searching element thus it returns index 2 (Check how we found the position from the iterator it returned).
Example 3: When the searched element is not found in the searching range
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> arr{ 1, 2, 3, 8, 4, 3 };
int searching_element = 7;
vector<int>::iterator it;
//starting iterator of range= arr.begin()
//end iterator of range =arr.end()
it = find(arr.begin(), arr.end(), searching_element);
if (it != arr.end())
cout << searching_element << " is at position: " << it - arr.begin() << endl;
else
cout << searching_element << " not found";
return 0;
}
Output:
7 not found
In the above case, the searching element is not present and that's why it returned arr.end() which means iterator to the end of the range.