C++ STL中的常用遍历算法分享
在 C++ STL 中,有很多方便实用的遍历算法,可以帮助程序员更方便地进行数据的遍历和处理。本文将分享 C++ STL 常用遍历算法的完整攻略。
算法介绍
常用的遍历算法有以下几种:
- for_each
- find
- find_if
- count
- accumulate
以上算法都位于 algorithm 头文件中,因此我们需要先包含头文件。
#include <algorithm>
for_each
for_each 算法非常简单,它只需要对数据集合中的每一个元素执行相同的操作即可。我们可以使用一个函数对象或函数指针作为参数,对每个元素执行操作。以下是一个简单的例子:
void Print(int x)
{
std::cout << x << std::endl;
}
int main()
{
std::vector<int> vec{ 1, 2, 3, 4, 5 };
std::for_each(vec.begin(), vec.end(), Print); // 对每个元素执行Print函数
return 0;
}
以上代码会输出:
1
2
3
4
5
find
find 算法用于查找数据集合中指定值的元素。该算法会在数据集合中找到第一个等于指定值的元素,找到后返回元素的迭代器,如果未找到则返回数据集合的尾部迭代器。以下是一个简单的例子:
int main()
{
std::list<int> lst{ 1, 2, 3, 4, 5 };
auto ret = std::find(lst.begin(), lst.end(), 3); // 查找列表中第一个值为3的元素
if (ret != lst.end())
{
std::cout << "找到了" << std::endl;
}
else
{
std::cout << "未找到" << std::endl;
}
return 0;
}
以上代码会输出 “找到了”。
find_if
find_if 算法与 find 算法类似,但 find_if 算法会使用指定的条件来查找元素。该算法会在数据集合中找到第一个满足条件的元素,找到后返回元素的迭代器,如果未找到则返回数据集合的尾部迭代器。以下是一个简单的例子:
bool IsOdd(int x)
{
return (x % 2 == 1);
}
int main()
{
std::vector<int> vec{ 2, 4, 6, 7, 8 };
auto ret = std::find_if(vec.begin(), vec.end(), IsOdd); // 查找第一个奇数
if (ret != vec.end())
{
std::cout << "找到了" << std::endl;
}
else
{
std::cout << "未找到" << std::endl;
}
return 0;
}
以上代码会输出 “找到了”。
count
count 算法用于计算数据集合中指定值的元素数量。该算法会遍历数据集合,查找有多少个元素等于指定值。以下是一个简单的例子:
int main()
{
std::vector<int> vec{ 1, 2, 3, 3, 4, 5 };
int cnt = std::count(vec.begin(), vec.end(), 3); // 计算有多少个元素等于3
std::cout << "共有" << cnt << "个3" << std::endl;
return 0;
}
以上代码会输出 “共有2个3”。
accumulate
accumulate 算法用于将数据集合中的元素累加起来。此函数还可以进行其它操作,它需要使用一个函数对象或函数指针来指定如何处理元素。以下是一个简单的例子:
int main()
{
std::vector<int> vec{ 1, 2, 3, 4, 5 };
int sum = std::accumulate(vec.begin(), vec.end(), 0); // 计算元素的总和
std::cout << "总和为" << sum << std::endl;
return 0;
}
以上代码会输出 “总和为15”。
总结
C++ STL 中提供了很多方便实用的遍历算法,它们可以帮助程序员更方便地进行数据的遍历和处理。在实际使用中,我们需要根据情况选择合适的算法来解决问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ STL中的常用遍历算法分享 - Python技术站