Skip to content

Commit 3c42e48

Browse files
authored
Merge pull request #335 from iamanolive/main
C++ STL Blog Posts
2 parents d37dcf9 + 7a64f67 commit 3c42e48

File tree

12 files changed

+2390
-3
lines changed

12 files changed

+2390
-3
lines changed

dsa/intermediate/Graph_traversal.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ tags:
1616
- java
1717
- programming
1818
- tutorial
19-
sidebar_position: 5
19+
sidebar_position: 3
2020
---
2121
## What is Graph Data Structure
2222
Graph Data Structure is a collection of vertices connected by edges. The vertices(V) are also referred as nodes and lines connecting any two nodes are called edges(E). A graph is denoted by G(V,E).

dsa/intermediate/_category_.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
"type": "generated-index",
66
"description": "Learn the intermediate of the Data Structures."
77
}
8-
}
8+
}

dsa/intermediate/binary_tree.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ tags:
1313
- java
1414
- programming
1515
- tutorial
16-
sidebar_position: 5
16+
sidebar_position: 2
1717
---
1818
In this tutorial we will explore one of the fundamental data structure in computer science: Binary Tree
1919
# What is a Binary Tree?
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"label": "cpp-stl",
3+
"position": 2,
4+
"link": {
5+
"type": "generated-index",
6+
"description": "Learn everything from the basics to the advanced topics that make up the C++ Standard Template Library."
7+
}
8+
}

dsa/intermediate/cpp_stl/cpp_find.md

Lines changed: 285 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,285 @@
1+
---
2+
id: cpp-find
3+
title: The Find Algorithm in C++
4+
sidebar_label: CPP STL
5+
tags:
6+
- dsa
7+
- data-structures
8+
- cpp
9+
- intermediate
10+
- stl
11+
- standard template library
12+
- cpp stl
13+
- programming
14+
- tutorial
15+
- find algorithm
16+
- cpp find
17+
sidebar_position: 7
18+
---
19+
20+
# Mastering the `find` Algorithm in C++: A Comprehensive Guide
21+
22+
Hello, C++ enthusiasts! Today, we’re diving into one of the most fundamental and versatile components of the C++ Standard Library: the `find` algorithm. If you're looking to enhance your understanding and utilization of searching in C++, you're in the right place. This guide will cover everything you need to know about the `find` algorithm, from basic usage to advanced features, complete with examples and practical applications.
23+
24+
## What is the `find` Algorithm?
25+
26+
The `find` algorithm is a built-in function in the C++ Standard Library that allows you to search for a specific element in a range, typically specified by two iterators. It is part of the `<algorithm>` header and provides a straightforward way to locate elements within containers like vectors, lists, and arrays.
27+
28+
### Why Use the `find` Algorithm?
29+
30+
1. **Efficiency**: The find algorithm is optimized for performance and typically runs in O(n) time complexity.
31+
2. **Convenience**: It simplifies the search process and reduces the amount of boilerplate code needed to implement searching.
32+
3. **Flexibility**: The find algorithm can be used with various types of containers and custom comparison functions.
33+
34+
## Basics of the `find` Algorithm
35+
36+
Let’s start with the basics of using the `find` algorithm in C++.
37+
38+
### Including the Header
39+
40+
To use the `find` algorithm, you need to include the `<algorithm>` header.
41+
42+
```cpp
43+
#include <algorithm>
44+
#include <iostream>
45+
#include <vector>
46+
```
47+
48+
### Basic Usage
49+
50+
The `find` algorithm requires three parameters: two iterators specifying the range to search within and the value to search for.
51+
52+
```cpp
53+
#include <algorithm>
54+
#include <iostream>
55+
#include <vector>
56+
57+
int main() {
58+
std::vector<int> numbers = {1, 2, 3, 4, 5};
59+
auto it = std::find(numbers.begin(), numbers.end(), 3);
60+
61+
if (it != numbers.end()) {
62+
std::cout << "Element found: " << *it << std::endl;
63+
} else {
64+
std::cout << "Element not found." << std::endl;
65+
}
66+
67+
return 0;
68+
}
69+
```
70+
71+
### Searching in Different Containers
72+
73+
You can use the `find` algorithm with various types of containers, such as vectors, lists, and arrays.
74+
75+
Example with a List:
76+
77+
```cpp
78+
#include <algorithm>
79+
#include <iostream>
80+
#include <list>
81+
82+
int main() {
83+
std::list<int> numbers = {1, 2, 3, 4, 5};
84+
auto it = std::find(numbers.begin(), numbers.end(), 3);
85+
86+
if (it != numbers.end()) {
87+
std::cout << "Element found: " << *it << std::endl;
88+
} else {
89+
std::cout << "Element not found." << std::endl;
90+
}
91+
92+
return 0;
93+
}
94+
```
95+
96+
## Advanced Features
97+
98+
Now that we've covered the basics, let's explore some advanced features and techniques for using the `find` algorithm in C++.
99+
100+
### Using `find` with Custom Data Types
101+
102+
You can use the `find` algorithm to search for elements in containers of custom data types by providing a suitable comparison function.
103+
104+
Example with a Custom Data Type:
105+
106+
```cpp
107+
#include <algorithm>
108+
#include <iostream>
109+
#include <vector>
110+
#include <string>
111+
112+
struct Person {
113+
std::string name;
114+
int age;
115+
116+
bool operator==(const Person &other) const {
117+
return name == other.name && age == other.age;
118+
}
119+
};
120+
121+
int main() {
122+
std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}};
123+
Person target = {"Bob", 25};
124+
auto it = std::find(people.begin(), people.end(), target);
125+
126+
if (it != people.end()) {
127+
std::cout << "Person found: " << it->name << ", " << it->age << std::endl;
128+
} else {
129+
std::cout << "Person not found." << std::endl;
130+
}
131+
132+
return 0;
133+
}
134+
```
135+
136+
### Using `find_if` for More Complex Searches
137+
138+
When you need more complex search criteria, you can use the `find_if` algorithm, which allows you to specify a predicate function.
139+
140+
Example with `find_if`:
141+
142+
```cpp
143+
#include <algorithm>
144+
#include <iostream>
145+
#include <vector>
146+
147+
int main() {
148+
std::vector<int> numbers = {1, 2, 3, 4, 5};
149+
auto it = std::find_if(numbers.begin(), numbers.end(), [](int x) {
150+
return x > 3;
151+
});
152+
153+
if (it != numbers.end()) {
154+
std::cout << "First element greater than 3: " << *it << std::endl;
155+
} else {
156+
std::cout << "No elements greater than 3 found." << std::endl;
157+
}
158+
159+
return 0;
160+
}
161+
```
162+
163+
### Using `find_if_not` for Negative Searches
164+
165+
The `find_if_not` algorithm finds the first element that does not satisfy a given predicate.
166+
167+
```cpp
168+
#include <algorithm>
169+
#include <iostream>
170+
#include <vector>
171+
172+
int main() {
173+
std::vector<int> numbers = {1, 2, 3, 4, 5};
174+
auto it = std::find_if_not(numbers.begin(), numbers.end(), [](int x) {
175+
return x < 3;
176+
});
177+
178+
if (it != numbers.end()) {
179+
std::cout << "First element not less than 3: " << *it << std::endl;
180+
} else {
181+
std::cout << "All elements are less than 3." << std::endl;
182+
}
183+
184+
return 0;
185+
}
186+
```
187+
188+
## Practical Applications of the find Algorithm
189+
190+
The `find` algorithm is not just a theoretical construct; it is immensely practical and can be used in various scenarios to solve real-world problems.
191+
192+
### Problem 1: Finding an Element in a Vector
193+
194+
You have a vector of integers, and you want to find a specific element.
195+
196+
```cpp
197+
#include <algorithm>
198+
#include <iostream>
199+
#include <vector>
200+
201+
int main() {
202+
std::vector<int> numbers = {1, 2, 3, 4, 5};
203+
int target = 4;
204+
auto it = std::find(numbers.begin(), numbers.end(), target);
205+
206+
if (it != numbers.end()) {
207+
std::cout << "Element " << target << " found at index " << std::distance(numbers.begin(), it) << std::endl;
208+
} else {
209+
std::cout << "Element " << target << " not found." << std::endl;
210+
}
211+
212+
return 0;
213+
}
214+
```
215+
216+
### Problem 2: Finding a String in a List
217+
218+
You have a list of strings, and you want to find a specific string.
219+
220+
```cpp
221+
#include <algorithm>
222+
#include <iostream>
223+
#include <list>
224+
#include <string>
225+
226+
int main() {
227+
std::list<std::string> names = {"Alice", "Bob", "Charlie"};
228+
std::string target = "Bob";
229+
auto it = std::find(names.begin(), names.end(), target);
230+
231+
if (it != names.end()) {
232+
std::cout << "Name " << target << " found." << std::endl;
233+
} else {
234+
std::cout << "Name " << target << " not found." << std::endl;
235+
}
236+
237+
return 0;
238+
}
239+
```
240+
241+
### Problem 3: Finding a Custom Object in a Set
242+
243+
You have a set of custom objects, and you want to find a specific object based on a member variable.
244+
245+
```cpp
246+
#include <algorithm>
247+
#include <iostream>
248+
#include <set>
249+
#include <string>
250+
251+
struct Book {
252+
std::string title;
253+
int year;
254+
255+
bool operator<(const Book &other) const {
256+
return title < other.title;
257+
}
258+
};
259+
260+
bool compareByTitle(const Book &a, const Book &b) {
261+
return a.title == b.title;
262+
}
263+
264+
int main() {
265+
std::set<Book> books = {{"C++ Primer", 2012}, {"Effective C++", 2005}, {"The C++ Programming Language", 2013}};
266+
Book target = {"Effective C++", 2005};
267+
auto it = std::find_if(books.begin(), books.end(), [&](const Book &b) {
268+
return compareByTitle(b, target);
269+
});
270+
271+
if (it != books.end()) {
272+
std::cout << "Book found: " << it->title << ", " << it->year << std::endl;
273+
} else {
274+
std::cout << "Book not found." << std::endl;
275+
}
276+
277+
return 0;
278+
}
279+
```
280+
281+
## In Conclusion
282+
283+
The `find` algorithm is a powerful and versatile tool in the C++ Standard Library, offering efficient and flexible searching capabilities. By mastering the `find` algorithm, you can write more efficient, readable, and maintainable code. Whether you're searching for simple data types, complex objects, or using custom comparison functions, the `find` algorithm is the go-to solution. <br />
284+
285+
So, dive into the world of searching, experiment with the `find` algorithm, and unlock the full potential of your C++ programming skills. Happy coding, and may your searches always be successful!

0 commit comments

Comments
 (0)