C++ STL中五个常用算法使用教程及实例讲解
作为C++语言的标准库之一,STL(Standard Template Library)提供了很多有用的容器和算法,让C++开发者更加高效地编写程序。本文将介绍STL中的五个常用算法,包括排序、查找、遍历、求和和去重,并以实例的形式展示具体使用方法。
排序算法
STL中提供了两个常用的排序算法,即sort
和stable_sort
。其中,sort
是快速排序的实现,而stable_sort
则是归并排序的实现。两个算法的使用方法基本一致,只是在处理重复元素的时候有所不同,后者能够保证稳定性。下面是两个示例说明:
示例1
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr[] = {5,2,8,6,1,9,3,7,4};
int len = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr+len);
for(int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
return 0;
}
输出结果:
1 2 3 4 5 6 7 8 9
示例2
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int a, int b)
{
return a % 3 < b % 3; //余数小的放前面,保证稳定性
}
int main()
{
int arr[] = {5,2,8,6,1,9,3,7,4};
int len = sizeof(arr) / sizeof(arr[0]);
stable_sort(arr, arr+len, cmp);
for(int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
return 0;
}
输出结果:
3 6 9 5 8 2 7 1 4
查找算法
STL中提供了两个查找算法,即find
和binary_search
。其中,find
是在序列中线性查找给定元素的位置,而binary_search
则是使用二分查找算法在有序序列中搜索元素。下面是两个示例说明:
示例1
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr[] = {5,2,8,6,1,9,3,7,4};
int len = sizeof(arr) / sizeof(arr[0]);
if(find(arr, arr+len, 6) != arr+len)
{
cout << "6找到了!" << endl;
}
else
{
cout << "6没找到!" << endl;
}
return 0;
}
输出结果:
6找到了!
示例2
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9};
int len = sizeof(arr) / sizeof(arr[0]);
if(binary_search(arr, arr+len, 10))
{
cout << "10找到了!" << endl;
}
else
{
cout << "10没找到!" << endl;
}
return 0;
}
输出结果:
10没找到!
遍历算法
STL中提供了多个遍历算法,包括for_each
、transform
和accumulate
。其中,for_each
用于遍历容器元素并执行指定操作,transform
用于对容器中的每个元素进行变换,accumulate
则用于对数值型容器元素求和。下面是两个示例说明:
示例1
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void print(int n)
{
cout << n << " ";
}
int main()
{
vector<int> v = {5,2,8,6,1,9,3,7,4};
for_each(v.begin(), v.end(), print);
cout << endl;
return 0;
}
输出结果:
5 2 8 6 1 9 3 7 4
示例2
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int add(int x, int y)
{
return x + y;
}
int main()
{
vector<int> v = {1,2,3,4,5,6,7,8,9};
int sum = accumulate(v.begin(), v.end(), 0, add);
cout << "sum = " << sum << endl;
return 0;
}
输出结果:
sum = 45
去重算法
STL中提供了unique
算法,用于删除容器中相邻的重复元素,并返回去重后的尾迭代器。虽然该算法并不会改变容器的大小,但是返回的尾迭代器可以用于删除重复元素,从而实现真正的去重。下面是一个示例说明:
示例
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {1,2,2,3,4,4,5,5,5};
vector<int>::iterator it;
it = unique(v.begin(), v.end());
for(auto i = v.begin(); i != it; i++)
{
cout << *i << " ";
}
cout << endl;
v.erase(it, v.end());
for(int i : v)
{
cout << i << " ";
}
cout << endl;
return 0;
}
输出结果:
1 2 3 4 5
1 2 3 4 5
结语
以上就是STL中常用的五个算法,它们的用途十分广泛,在实际开发中都有很大的用处。希望本文能帮助读者更好地理解和使用STL。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ STL中五个常用算法使用教程及实例讲解 - Python技术站