STL中的通用函数对象及应用
发布时间: 2023-12-20 22:00:17 阅读量: 39 订阅数: 48
STL区间成员函数及区间算法总结
# 第一章:STL简介和通用函数对象概述
## 1.1 STL(标准模板库)简介
STL(Standard Template Library,标准模板库)是C++语言的一个重要组成部分,它提供了丰富的数据结构和算法,为程序员提供了丰富的工具箱。STL包括多个部分,其中之一就是通用函数对象,它是STL中非常强大且灵活的一部分。
## 1.2 通用函数对象概述
通用函数对象是一种重载了函数调用操作符operator()的类对象,其实例可以像普通函数一样被调用。STL中提供了大量的通用函数对象,用于实现各种算法和容器的操作。
## 1.3 函数对象的优势
## 2. 第二章:STL中通用函数对象的类型
### 2.1 内建函数对象
在STL中,提供了很多内建的函数对象,它们位于`<functional>`头文件中。这些内建函数对象包括算术操作、逻辑操作、关系操作等,可以直接在STL算法中使用,也可以作为模板参数传递给容器适配器等。
#### 代码示例(C++):
```cpp
#include <iostream>
#include <algorithm>
#include <functional>
int main() {
std::vector<int> numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
// 使用内建函数对象进行排序
std::sort(numbers.begin(), numbers.end(), std::less<int>());
// 打印排序后的结果
for (const auto& num : numbers) {
std::cout << num << " ";
}
return 0;
}
```
#### 代码解释:
- 在代码中,使用`std::less<int>()`进行升序排序,这是一个内建的函数对象,表示小于比较。
- `std::sort`算法接受比较函数对象作为第三个参数,因此可以直接传入`std::less<int>()`进行排序。
#### 代码结果:
```
1 1 2 3 3 4 5 5 6 9
```
### 2.2 自定义函数对象
除了内建的函数对象,我们也可以自定义函数对象,以满足特定的比较或操作需求。
#### 代码示例(Java):
```java
import java.util.Arrays;
import java.util.Comparator;
public class CustomComparatorExample {
public static void main(String[] args) {
Integer[] numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
// 使用自定义函数对象进行降序排序
Arrays.sort(numbers, new ReverseComparator());
// 打印排序后的结果
for (int num : numbers) {
System.out.print(num + " ");
}
}
static class ReverseComparator implements Comparator<Integer> {
@Override
public int compare(Integer a, Integer b) {
return b - a;
}
}
}
```
#### 代码解释:
- 在代码中,定义了一个`ReverseComparator`类作为自定义的比较函数对象,实现了`Comparator`接口,并重写了`compare`方法。
- `Arrays.sort`方法接受比较器作为第二个参数,因此可以传入`ReverseComparator`进行降序排序。
#### 代码结果:
```
9 6 5 5 4 3 3 2 1 1
```
### 2.3 Lambda表达式
Lambda表达式是C++11引入的特性,可以方便地创建匿名函数对象,通常用于对容器进行排序、筛选等操作。
#### 代码示例(Python):
```python
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
# 使用Lambda表达式进行升序排序
sorted_numbers = sorted(numbers, key=lambda x: x)
# 打印排序后的结果
print(sorted_numbers)
```
#### 代码解释:
- 在代码中,使用`lambda x: x`创建了一个匿名函数对象,实现了对元素自身的比较。
- `sorted`函数接受`key`参数作为排序规则,
0
0