目录
引言
一、排序
二、搜索
三、转换
四、比较
五、合并
总结
本文将介绍C++ STL中最常用的算法,包括排序、搜索、转换、比较、合并等。我们将逐一介绍这些算法,并提供示例代码以便更好地理解每个算法的用法。
排序是STL中最常用的算法之一,它可以将容器中的元素按升序或降序排列。STL提供了几种不同的排序算法,包括快速排序、堆排序、归并排序等。
以下是STL中的常见排序算法:
以下是一个简单的示例代码,演示了如何使用std::sort进行排序:
#include
#include
#include
int main()
{
std::vector v{ 5, 2, 3, 1, 4 };
std::sort(v.begin(), v.end()); // sort the vector
for (auto i : v) {
std::cout << i << ' '; // print out the sorted vector
}
return 0;
}
输出结果:1 2 3 4 5
搜索算法可以在STL中用于在容器中查找元素。STL提供了几种不同的搜索算法,包括二分搜索、线性搜索等。
以下是STL中的常见搜索算法:
以下是一个简单的示例代码,演示了如何使用std::find进行线性搜索:
#include
#include
#include
int main()
{
std::vector v{ 5, 2, 3, 1, 4 };
auto it = std::find(v.begin(), v.end(), 3); // find the element 3
if (it != v.end()) {
std::cout << "Found element: " << *it << '\n'; // print out the found element
}
else {
std::cout << "Element not found\n";
}
return 0;
}
输出结果:Found element: 3
STL中的转换算法可用于执行各种转换,例如将元素从一种容器类型转换为另一种容器类型。这些算法还可以用于将容器中的元素映射到新的值。
以下是STL中的常见转换算法:
以下是一个简单的示例代码,演示了如何使用std::transform将一个容器中的元素映射到新的值:
#include
#include
#include
int main()
{
std::vector v{ 1, 2, 3, 4, 5 };
std::vector v2(v.size());
std::transform(v.begin(), v.end(), v2.begin(), [](int x) { return x * x; }); // square every element in v and store the result in v2
for (auto i : v2) {
std::cout << i << ' '; // print out the squared vector
}
return 0;
}
输出结果:1 4 9 16 25
STL中的比较算法可用于执行各种比较操作,例如比较两个容器中的元素或查找最大/最小值。
以下是STL中的常见比较算法:
以下是一个简单的示例代码,演示了如何使用std::max返回容器中的最大值:
#include
#include
#include
int main()
{
std::vector v{ 1, 2, 3, 4, 5 };
auto max_elem = std::max_element(v.begin(), v.end()); // find the maximum element
std::cout << "Maximum element: " << *max_elem << '\n'; // print out the maximum element
return 0;
}
输出结果:Maximum element: 5
STL中的合并算法可用于将两个已排序的容器合并为一个已排序的容器。
以下是STL中的常见合并算法:
以下是一个简单的示例代码,演示了如何使用std::merge将两个已排序的容器合并为一个已排序的容器:
#include
#include
#include
int main()
{
std::vector v1{ 1, 3, 5 };
std::vector v2{ 2, 4, 6 };
std::vector merged(v1.size() + v2.size());
std::merge(v1.begin(), v1.end(), v2.begin(), v2.end(), merged.begin()); // merge the two vectors
for (auto i : merged) {
std::cout << i << ' '; // print out the merged vector
}
return 0;
}
输出结果:1 2 3 4 5 6
上述算法只是STL中的一部分。本文提供了一些常用的算法示例,以便更好地了解这些算法的实现和用法。在实际编程中,可以根据实际需求选择适当的算法。
需要注意的是,STL中的许多算法都要求容器中的元素是可比较的,因此需要定义比较函数或使用默认比较函数。另外,STL中的许多算法都要求容器是已排序的,因此需要使用排序算法进行排序。