不造轮子之STL中统计算法

2024-09-30 16:06:44 浏览数 (3)

在日常的开发中,常涉及到容器的常见操作,如查找、删除、排序等,C STL提供了丰富的算法库,可以方便的完成这些操作。为了避免重复造轮子,同时为了提高效率,了解常见的STL算法是非常有必要的。本文将介绍统计相关算法。

1. std::all_of

功能:检查范围内的所有元素是否都满足某个条件。

代码语言:javascript复制
#include <iostream>
#include <vector>
#include <algorithm>

int main() 
{
 std::vector vec = {2, 4, 6, 8};
 bool all_even = std::all_of(vec.begin(), vec.end(),
    [](int i){ return i % 2 == 0; });
 std::cout << (all_even ? 
   "All are even" : "Not all are even") << std::endl;
}

解读:std::all_of 函数检查容器中的所有元素是否都满足lambda表达式中的条件。

2. std::any_of

功能:检查范围内的任意一个元素是否满足某个条件。

代码语言:javascript复制
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
 std::vector vec = {1, 3, 5, 7};
 bool any_odd = std::any_of(vec.begin(), vec.end(),
    [](int i){ return i % 2 != 0; });
 std::cout << (any_odd ? "At least one is odd" : "All are even") << std::endl;
}

解读:std::any_of 函数检查容器中是否存在至少一个元素满足lambda表达式中的条件。

3. std::none_of

功能:检查范围内的所有元素是否都不满足某个条件。

代码语言:javascript复制
#include <iostream>
#include <vector>
#include <algorithm>

int main() 
{
 std::vector vec = {2, 4, 6, 8};
 bool none_odd = std::none_of(vec.begin(), vec.end(), 
   [](int i) { return i % 2 != 0; });
 std::cout << (none_odd ?
    "None are odd" : "At least one is odd") << std::endl;
}

解读:std::none_of 函数检查容器中的所有元素是否都不满足lambda表达式中的条件。

4. std::count

功能:统计范围内满足某个条件的元素个数。

代码语言:javascript复制
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
 std::vector vec = {1, 2, 3, 2, 4, 2, 5};
 int count = std::count(vec.begin(), vec.end(), 2);
 std::cout << "Count of 2: " << count << std::endl;
}

解读:std::count 函数统计容器中等于指定值的元素个数。

5. std::count_if

功能:统计范围内满足某个条件的元素个数。

代码语言:javascript复制
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
 std::vector vec = {1, 2, 3, 4, 5};
 int count = std::count_if(vec.begin(), vec.end(), 
   [](int i){ return i % 2 == 0; });
 std::cout << "Count of even numbers: " << count << std::endl;
}

解读:std::count_if 函数统计容器中满足lambda表达式条件的元素个数。

总结

本文介绍了C STL中统计相关算法,包括std::all_of、std::any_of、std::none_of、std::count和std::count_if,这些算法可以帮助我们方便地完成对容器中元素的统计操作。

0 人点赞