C++之STL的algorithm(3)之查找算法(find、count、find_if、count_if)整理

C++之STL的algorithm(3)之查找算法(find、count、find_if、count_if)整理

注:整理一些突然学到的C++知识,随时mark一下
例如:忘记的关键字用法,新关键字,新数据结构



提示:本文为 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;

总结

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值