C++之STL的algorithm(3)之查找算法(find、count、find_if、count_if)整理
注:整理一些突然学到的C++知识,随时mark一下
例如:忘记的关键字用法,新关键字,新数据结构
C++ 的查找算法整理
提示:本文为 C++ 中find、count 的写法和举例
一、查找算法
详细解释<algorithm>
头文件中各个查找算法的参数列表和返回值,然后给出简单的代码示例。
1、 find 算法
参数列表:
beg
:容器的开始迭代器,指向要搜索范围的起始位置。
end
:容器的结束迭代器,指向要搜索范围的结束位置(不包含此位置)。
value
:要查找的元素值。
返回值:
返回一个迭代器,指向找到的第一个元素的位置;如果未找到,则返回end迭代器。
注意,find算法要和容器本身带有的find方法相区别
代码示例:
std::vector<int> v = {1, 2, 3, 4, 5};
auto it = std::find(v.begin(), v.end(), 3);
if (it != v.end()) {
std::cout << "Found: " << *it << std::endl;
} else {
std::cout << "Not found" << std::endl;
}
2、find_if 算法
参数列表:
beg、end
:开始结束迭代器
_callback
:回调函数或谓词,接受容器中的元素作为参数,并返回一个布尔值。
返回值:
如果找到满足条件的元素,返回指向该元素的迭代器;否则返回end迭代器。
代码示例:
std::vector<int> v = {1, 2, 3, 4, 5};
auto it = std::find_if(v.begin(), v.end(), [](int n) { return n % 2 == 0; });
if (it != v.end()) {
std::cout << "Even number found: " << *it << std::endl;
} else {
std::cout << "No even number found" << std::endl;
}
3、adjacent_find 算法
参数列表:
beg、end
:同上。
_callback
:可选参数,回调函数或谓词,用于自定义相邻元素是否“相等”的判断。
返回值:
如果找到相邻的重复元素(或满足条件的元素),返回指向第一个元素的迭代器;否则返回end迭代器。
代码示例:
std::vector<int> v = {1, 2, 2, 3, 4};
auto it = std::adjacent_find(v.begin(), v.end());
if (it != v.end()) {
std::cout << "Adjacent duplicates found: " << *it << std::endl;
} else {
std::cout << "No adjacent duplicates found" << std::endl;
}
4、binary_search 算法
参数列表:
beg、end
:同上,但容器必须是已排序的。
value
:要查找的元素值。
返回值:
如果找到元素,返回true;否则返回false。
注意: 这个算法只能在已排序的序列中使用。
代码示例:
std::vector<int> v = {1, 2, 3, 4, 5};
std::sort(v.begin(), v.end()); // 确保序列已排序
bool found = std::binary_search(v.begin(), v.end(), 3);
if (found) {
std::cout << "Element found" << std::endl;
} else {
std::cout << "Element not found" << std::endl;
}
5、count 算法
参数列表:
beg、end
:同上。
value
:要计数的元素值。
返回值:
返回元素在序列中出现的次数。
代码示例:
std::vector<int> v = {1, 2, 2, 3, 2, 4};
int count = std::count(v.begin(), v.end(), 2);
std::cout << "Number of 2s: " << count << std::endl;
6、count_if 算法
参数列表:
beg、end
:同上。
_callback
:回调函数或谓词,用于自定义计数条件。
返回值:
返回满足条件的元素在序列中出现的次数。
代码示例:
std::vector<int> v = {1, 2, 3, 4, 5};
int count = std::count_if(v.begin(), v.end(), [](int n) { return n % 2 == 0; });
std::cout << "Number of even numbers: " << count << std::endl;