通俗易懂的C++ STL

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 是某类型链表集合。它们都有显示、查询和排序等功能,常规思维是每个容器都有自己的显示、查询和排序等函数。但是细想,不同容器中完成相同功能代码的思路大致是相同的,那么能不能把它们抽象出来,多个容器仅对应一个显示、一个查询、一个排序函数呢?这是泛型思想发展的必然结果,于是迭代器思维就产生了。下面将通过实例来加深对迭代器的理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值