Skip to content

Latest commit

 

History

History
37 lines (23 loc) · 2.4 KB

什么是泛型编程,他在STL中是怎么使用的?.md

File metadata and controls

37 lines (23 loc) · 2.4 KB

泛型编程是一种软件开发方法论,其核心思想是通过抽象和重用代码来增强软件的灵活性、可维护性和复用性。在泛型编程中,算法或数据结构被设计为独立于它们所操作的具体数据类型。这种抽象化允许程序员使用相同的代码基础处理不同类型的数据,只要这些数据类型支持算法所需的操作。

STL中的泛型编程

C++的标准模板库(STL)是泛型编程的一个经典实例。STL提供了一套通用的容器类(如vectorlistmap等),算法(如sortfindaccumulate等),以及其他实用工具(如迭代器、函数对象等),它们都是泛型化的,可以与任何符合要求的数据类型一起工作。

容器

STL容器是泛型的,因为它们可以存储任何类型的对象。例如,std::vector<int> 可以存储整数,而 std::vector<std::string> 可以存储字符串。容器通过模板参数化其元素的类型:

std::vector<int> intVec; // 存储整数的向量
std::list<double> dblList; // 存储双精度浮点数的列表

算法

STL算法也是泛型的,它们通过迭代器与容器进行交互,而不是直接操作容器。这种设计使得相同的算法可以应用于不同类型的容器,只要容器提供了适当类型的迭代器。例如,std::sort函数可以对任何连续存储的元素序列进行排序,无论它是std::vector、数组还是std::array

std::vector<int> vec = {4, 1, 3, 5, 2};
std::sort(vec.begin(), vec.end()); // 对向量进行排序

迭代器

迭代器在STL的泛型编程中扮演着中介的角色。它们提供了一种访问容器中元素的方法,同时隐藏了容器的内部结构。通过使用迭代器,STL算法可以在不知道或不关心容器具体实现的情况下工作。

函数对象和Lambda表达式

STL允许你通过函数对象(包括lambda表达式)来自定义某些操作,比如自定义比较函数。这增加了STL的灵活性和泛型能力,因为你可以定义算法的行为,而无需修改算法本身。

std::sort(vec.begin(), vec.end(), [](int a, int b) { return a > b; }); // 使用lambda表达式降序排序

总之,STL通过泛型编程提供了一套强大的、类型无关的工具,使得开发者能够写出既安全又高效的代码,而不用牺牲代码的通用性和复用性。