关于C++STL刷题知识点汇总文章可以参考:
C++刷题基础知识(栈、队列、hash、STL、基础函数等)---持续更新-优快云博客
1. 泛型编程template
1.1 泛型编程基础
基本模式:
- C++泛型编程是一种编程范式,它允许程序员编写可适用于多种数据类型的代码。泛型编程的核心思想是将数据类型参数化,即通过使用类型参数来代替具体的数据类型,以实现代码的通用性和复用性。
- 在C++中,泛型编程主要通过模板来实现。模板是一种编译时多态性,它允许程序员定义与数据类型无关的函数或类,而将具体的数据类型作为模板参数在编译时进行替换。
- C++模板可以分为函数模板和类模板两种类型。函数模板定义了一组与数据类型无关的函数,而类模板定义了一组与数据类型无关的类。在函数模板中,类型参数可以用于函数的返回类型、形参类型和函数体中的变量类型。在类模板中,类型参数可以用于类的成员变量类型、成员函数返回类型和形参类型。
意义:
- 泛型编程可以提高代码的复用性和可维护性,同时也可以提高代码的可读性和可理解性。通过使用泛型编程,程序员可以编写出更加通用的代码,而无需针对不同的数据类型编写不同的代码。此外,泛型编程还可以提高代码的可测试性和可扩展性,从而降低代码的维护成本和提高代码的生命周期。
1.2 泛型编程函数与类用例
分别定义泛型编程里的函数模板、类模板以及常用的STL库迭代器。
//1.函数模版
template <typename T>
T add(T x, T y) {
return x + y;
}
//2.类模板
template <typename T>
class MyClass {
public:
T value;
void setValue(T val) {
value = val;
}
};
//3.泛型迭代器
template <typename T>
class Iterator {
public:
T* ptr;
Iterator(T* ptr) : ptr(ptr) {}
bool hasNext() {
return ptr != nullptr;
}
T next() {
T val = *ptr;
ptr++;
return val;
}
};
注意:template <typename T> 的含义是C++中的一个模板声明,其中typename
是一个关键字,用于指示编译器将后面的类型名称视为类型参数。
在模板声明中,T
是一个类型参数,它表示一个占位符,可以代表任何类型。当使用模板函数或类时,可以将具体的类型替换为T
,以实现代码的通用性和复用性。
关于C++STL刷题知识点汇总文章可以参考: