目录
一.迭代器
二. 函数对象
三. 适配器
一.迭代器
是一种通用的指针类型,可以用来遍历 STL 容器中的元素。
具有以下作用和意义:
- 提供一种通用的方式来访问容器中的元素。
- 允许对不同类型的容器进行统一的操作。
- 增强了代码的灵活性和可扩展性。
一些常用的 API 及其详解如下:
begin()
:返回容器中第一个元素的迭代器。end()
:返回超出容器末尾的迭代器。++iter
:向前移动迭代器。--iter
:向后移动迭代器。
下面是一个简单的示例代码:
#include <vector>
#include <iostream>int main() {std::vector<int> numbers = { 1, 2, 3, 4, 5 };std::vector<int>::iterator iter = numbers.begin();while (iter != numbers.end()) {std::cout << *iter << " ";++iter;}return 0;
}
在这个示例中,通过迭代器 iter
遍历了 numbers
容器中的每个元素,并输出它们。
二. 函数对象
是一种可调用的对象,用于各种算法中。
作用和意义:
- 提供了一种通用的方式来传递自定义的操作。
- 增强了算法的灵活性和可扩展性。
- 可以封装复杂的逻辑,使代码更简洁、易维护。
常用 API 详解:
operator()
:用于定义函数对象的调用操作。- 可以接受参数,并返回特定类型的结果。
下面是一个简单的示例代码:
#include <algorithm>
#include <vector>
#include<iostream>// 自定义函数对象,用于比较两个整数的大小
struct IntComparer {bool operator()(int a, int b) {return a < b;}
};int main() {std::vector<int> numbers = { 5, 3, 1, 4, 2 };// 使用自定义的函数对象进行排序std::sort(numbers.begin(), numbers.end(), IntComparer());// 输出排序后的元素for (int num : numbers) {std::cout << num << " ";}return 0;
}
在上述示例中,定义了一个自定义的函数对象 IntComparer
,它实现了比较两个整数大小的逻辑。然后,使用这个函数对象作为参数传递给 std::sort()
算法,对 numbers
容器进行排序。
三. 适配器
是一种将一个类或函数转换为符合特定需求的接口的工具。
作用和意义:
- 提供了一种方便的方式来适配不同的需求。
- 增加了代码的灵活性和可重用性。
- 使得原本不符合特定接口的类或函数能够在特定场景中使用。
常用 API 详解:
std::adapter
:提供了一些常见的适配器类型,如stack
、queue
等。push()
:向适配器中添加元素。pop()
:从适配器中取出元素。
下面是一个简单的示例代码:
#include <stack>
#include <iostream>int main() {std::stack<int> myStack;myStack.push(5);myStack.push(3);myStack.push(1);while (!myStack.empty()) {int element = myStack.top();std::cout << element << " ";myStack.pop();}return 0;
}
在上述示例中,使用std::stack
适配器来实现栈的操作。通过push()
方法向栈中添加元素,通过pop()
方法从栈中取出元素