目录
STL-查找算法find
1.基本用法:
2.查找自定义类型:
3.查找范围:
STL-查找算法find
在C++的STL(标准模板库)中,find
算法用于在指定范围内查找指定值的元素。
功能描述:
- 查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()
函数原型:
- find(iterator beg, iterator end, value);
- // 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
- // beg 开始迭代器
- // end 结束迭代器
- // value 查找的元素
以下是使用 find
算法的一些基本示例:
1.基本用法:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 使用 find 查找数字 5
vector<int>::iterator it = find(numbers.begin(), numbers.end(), 5);
if (it != numbers.end()) {
cout << "找到了:" << *it << endl;
}
else {
cout << "未找到" << endl;
}
return 0;
}
2.查找自定义类型:
如果你在一个包含自定义类型的容器中查找元素,需要确保自定义类型有相应的比较方式,通常通过重载 ==
运算符。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
class Person {
public:
string name;
int age;
Person() = default;
Person(string n,int a):name(n),age(a){}
bool operator==(const Person& p) {
return name == p.name && age == p.age;
}
void print_person()const {
cout << "name:" << name << " age:" << age;
}
};
void test02() {
vector<Person> p;
p.push_back(Person("xiaobai", 11));
p.push_back(Person("xiaohong", 12));
p.push_back(Person("xiaocheng", 13));
p.push_back(Person("xiaohuang", 10));
p.push_back(Person("xiaolv", 9));
p.push_back(Person("xiaoqing", 12));
p.push_back(Person("xiaolan", 11));
p.push_back(Person("xiaozi", 10));
vector<Person>::iterator it=find(p.begin(), p.end(), Person("xiaolv", 9));
if (it == p.end()) {
cout << "没有找到这个人" << endl;
}
else {
cout << "找到了这个人" << endl;
it->print_person();
}
}
int main() {
test02();
return 0;
}
这里的 Person
类重载了 ==
运算符,以便在查找时进行比较。
3.查找范围:
你可以指定查找的范围,而不是整个容器。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 查找范围在前半部分
vector<int>::iterator it = find(numbers.begin(), numbers.begin() + 5, 3);
if (it != numbers.end()) {
cout << "找到了:" << *it << endl;
}
else {
cout << "未找到" << endl;
}
return 0;
}
写在最后:以上就是本篇文章的内容了,感谢你的阅读。如果感到有所收获的话可以给博主点一个赞哦。如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~