C++基础知识【算法库 <algorithm>】
C++ 标准库中的 <algorithm> 头文件提供了一组用于操作容器(如数组、向量、列表等)的算法。这些算法包括排序、搜索、复制、比较等,它们是编写高效、可重用代码的重要工具。<algorithm> 头文件定义了一组模板函数,这些函数可以应用于任何类型的容器,只要容器支持迭代器。这些算法通常接受两个或更多的迭代器作为参数,表示操作的起始和结束位置。
语法
大多数 <algorithm> 中的函数都遵循以下基本语法:[code]
algorithm_name(container.begin(), container.end(), ...);
[/code]这里的 container 是一个容器对象,begin() 和 end() 是容器的成员函数,返回指向容器开始和结束的迭代器。
实例
1. 排序算法
函数:sort
定义:对容器中的元素进行排序。
语法:[code]
sort(container.begin(), container.end(), compare_function);
[/code]其中 compare_function 是一个可选的比较函数,用于自定义排序方式。
实例[code]
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> numbers = {5, 2, 9, 1, 5, 6};
std::sort(numbers.begin(), numbers.end());
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
[/code]输出结果:
1 2 5 5 6 9
2. 搜索算法
函数:find
定义:在容器中查找与给定值匹配的第一个元素。
语法:[code]
auto it = find(container.begin(), container.end(), value);
[/code]如果找到,it 将指向匹配的元素;如果没有找到,it 将等于 container.end()。[code]
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
auto it = std::find(numbers.begin(), numbers.end(), 3);
if (it != numbers.end()) {
std::cout << "Found: " << *it << std::endl;
} else {
std::cout << "Value not found." << std::endl;
}
return 0;
}
[/code]输出结果:
Found: 3
3. 复制算法
函数:copy
定义:将一个范围内的元素复制到另一个容器或数组。
语法:[code]
copy(source_begin, source_end, destination_begin);
[/code][code]
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> source = {1, 2, 3, 4, 5};
int destination[5];
std::copy(source.begin(), source.end(), destination);
for (int i = 0; i < 5; ++i) {
std::cout << destination[i] << " ";
}
std::cout << std::endl;
return 0;
}
[/code]输出结果:
1 2 3 4 5 1.sort 函数
sort 函数是 algorithm 中的排序函数,相较于 C stdlib 中的 qsort 函数,用法更简单,也更广泛,同时内部实现也要更复杂。
对数组使用 sort 函数:[code]
#include<iostream>
#include<algorithm>
using namespace std;
int main () {
int arr [10] = { 2,4,1,6,7,5,8,10,3,9 };
cout << "排序前的数组:";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
sort (arr , arr + 10);
cout << "排序后的数组:";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
system ("pause");
return 0;
}
[/code]注意:这里的参数是数组的地址。
对容器 vector 使用 sort 函数:[code]
#include<iostream>
#include<algorithm>
using namespace std;
int main () {
vector<int> arr = { 2,4,1,6,7,5,8,10,3,9 };
cout << "排序前的数组:";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
sort (arr.begin () , arr.end ());
cout << "排序后的数组:";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
system ("pause");
return 0;
}
[/code] 2. reverse 函数
reverse 函数是 algorithm 中的反转函数,常适用于字符串,但不仅仅可以对字符串使用。
对 string 使用 reverse 函数:[code]
#include<iostream>
#include<algorithm>
using namespace std;
int main () {
string s = "Hello world";
cout << "反转前的字符串:";
cout << s << endl;
reverse (s.begin () , s.end ());
cout << "反转后的字符串:";
cout << s << endl;
system ("pause");
return 0;
}
[/code] 3. max & min 函数
max & min 函数是用来返回两变量之间较大(小)者的函数。[code]
#include<iostream>
#include<algorithm>
using namespace std;
int main () {
int a , b;
a = 1;
b = 10;
cout << "a:" << a << "," << "b:" << b << endl;
cout << "较大者:" << max (a , b) << endl;
cout << "较小者:" << min (a , b) << endl;
system ("pause");
return 0;
}
[/code]4. max_element & min_element 函数
该函数用于获取数组或容器中最大(小)的元素。[code]
#include<iostream>
#include<algorithm>
using namespace std;
int main () {
vector<int> arr = { 1,2,3,4,5,6,7,8,9,0 };
cout << "数组:";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
cout << "最大者:";
cout << *max_element (arr.begin () , arr.end ()) << endl;
cout << "最小者:";
cout << *min_element (arr.begin () , arr.end ()) << endl;
system ("pause");
return 0;
}
[/code]注意:该函数的返回值是元素的地址(对于容器,返回迭代器)。 5. binary_search 函数
函数一共三个参数,第一二个参数参照 sort 的参数,第三个参数是需要寻找的 key。[code]
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main () {
vector<int> haystack{ 1, 3, 4, 5, 9 };
vector<int> needles{ 1, 2, 3 };
for (const auto needle : needles) {
cout << "正在搜索 " << needle << '\n';
if (binary_search (haystack.begin () , haystack.end () , needle))
cout << "找到了 " << needle << '\n';
else
cout << "没找到!\n";
}
system ("pause");
return 0;
}
[/code]
页:
[1]