1、简述C++泛型化编程思想
泛型编程(Generic Programming)是一种语言机制,通过它可以实现一个标准的容器库。像类一样,泛型也是一种抽象数据类型,但是泛型不属于面向对象,它是面向对象的补充和发展。泛型编程在C++上的应用主要体现在两方面:函数模板和类模板。
接下来举个栗子
- CSDN博客https://blog.csdn.net/mary19920410/article/details/61914091
2、C++ const 小结
CSDN博客https://blog.csdn.net/Eric_Jo/article/details/4138548
anyway,模板类与类模板、函数模板与模板函数等的区别 https://www.cnblogs.com/wangduo/p/5559049.html
3、C++模板
模板是 C++ 语言中重要的概念。它提供了一种通用的方法来开发重用的代码,即以创建参数化的 C++ 类型。
模板分为两种类型:函数模板和类模板。
template <class T> //似乎没区别?这个多用。
template<typename name> //
函数模板与类模板的区别:栗子
//函数模板:
template<class T> max(const T a, const T b)
{
return (a>b ? a : b);
}
这样用:
int a = 1, b = 2;
max(a, b);
float c = 1.0f, d = 2.0f;
max(c, d);
//类模板:
template<class T>
class C
{
public:
T max(const T a, const T b)
{
return (a>b ? a : b);
}
};
对这个类进行实例化:
C<int> cn;
C<float> cf;
现在看出区别了吧,区别在于函数模板和类模板的使用方式上:
函数模板在使用时不需要程序员指定类型,编译器在编译的时候会自动绑定;而类模板需要程序员手工指定,指定的方式是:类名字<类型>。
对于函数模板来说,只需将数据类型抽象出来,使用 template< class name> 代替原先的变量,即可实现模板功能,函数中的类型相应地也要改为 name 。
该函数已经能够实现对不同的基本数据类型进行求和,若进一步思考,希望用该函数能够实现对链表、集合等元素的求和,这即是 STL 的思维方式。
另外,用于模板时,class 关键词可以用 typename 代替,即 template 。
4、C++ 标准库
- 标准函数库: 这个库是由通用的、独立的、不属于任何类的函数组成的。函数库继承自 C 语言。
- 面向对象类库: 这个库是类及其相关函数的集合。
———————————————————————————————— - C++ 标准库包含了所有的 C 标准库,为了支持类型安全,做了一定的添加和修改。
- - 标准函数库分为以下几类:
输入/输出 I/O
字符串和字符处理
数学
时间、日期和本地化
动态分配
其他
宽字符函数 - 标准的 C++ 面向对象类库定义了大量支持一些常见操作的类,比如输入/输出 I/O、字符串处理、数值处理。
- 面向对象类库包含以下内容:
标准的 C++ I/O 类
String 类
数值类
STL 容器类
STL 算法
STL 函数对象
STL 迭代器
STL 分配器
本地化库
异常处理类
杂项支持库
5、STL(三大组件:容器 算法 迭代器)
迭代器
迭代器(Iterator)是 STL 的核心技术,提供了统一访问容器元素的方法,为编写通用算法提供了坚实的技术基础。
迭代器即指针,可以是需要的任意类型,它的最大好处是可以使容器和算法分离。例如,有两个容器类,MyArray 是某类数组集合;MyLink 是某类型链表集合。它们都有显示、查询和排序等功能,常规思维是每个容器都有自己的显示、查询和排序等函数。但是细想,不同容器中完成相同功能代码的思路大致是相同的,那么能不能把它们抽象出来,多个容器仅对应一个显示、一个查询、一个排序函数呢?这是泛型思想发展的必然结果,于是迭代器思维就产生了。下面将通过实例来加深对迭代器的理解。