(Boolan) C++ STL与泛型编程

对于现在的计算机编程语言来说,语言和库已经形成了两大体系。只学一门语言可以实现自己想要的功能,也可以写出各式各样的程序,但是,不得已需要提一句,对于现在技术的发展速度来说,开发的效率变得尤为重要。而仅仅会一门编程语言,在现阶段其实已经成为了一件无意义的事。那么拿语言和数据结构来举例,他们俩已经是两个独立的体系了,而数据结构对于开发而言,基本的代码实现都是差不多的。那么,开发不同的系统,意味着会有巨大的重复过程要做,而这类重复过程其实也就是不断的*** 造 轮 子 ***的过程。先抛开,自己制造的轮子的开发效率问题不谈,那么自己制造的轮子,也不一定有在市场上购买的轮子质量过硬。那么,在很多时候,自造轮子,其实是一件得不偿失的事,因此:
*** 1.开发效率变慢 2. 且质量不一定是最好的 ***

那么语言学中,重要的一点就是库的学习。那么,现在来说,每种语言,在各自的特定领域都会有特定的库来实现想要的功能。比如Python的爬虫领域就有requests库等,深度学习算法领域常用到Caffe、Tensorflow库等等。这些呢其实已经是一些专用的库,可以实现一些特定需求中的特定功能,而无需自己从0开始写。而这些库其实是一些功能库,但再往底层查看,***程序最根本的目的是为了操作一些数据 *。而这限额护具的组织方式其实是一件十分重要的是,记得我在前面说过关于一个 钥匙和箱子的故事 **,这里面详细说明了,当数据量足够大的时候,出现的一些问题,其实也就是数据结构的问题,而数据结构其实多于每个程序来说都是必须要面对的。那么每个语言非常重要的是要有一套面向底层数据的库,而在c++中就是标准库(c++ Standard Library)。
引用下面图片中这本书的一句话:

不会使用标准库的C++程序员算不上是一个有开发效率的程序员


那么说了这么多,今天的主要目的就是初步的来看看标准库的那些事。

C++标准库的体系结构

C++标准库的设计思想

  • C++标准库,主要使用的是泛型编程(Generic Programming)的思想,而不是采用了面向对象的的主要思想。

C++ Standard Library Vs. Standard Template Library

  • 标准库中包含STL
  • STL主要由六大部件组成(后续详谈)

程序中标准库的引用

  • C++标准库的header files不包括扩展名(.h),例如#include <vector>
  • 新式的C header files不带扩展名,前面需要添加c,例如#include <cstdlib>
  • C语言中引入的方式依然可以用,例如#include <stdlib.h>

C++标准库的命名空间

  • C++标准库的命名空间全部是std
  • 如果使用C语言中的库,不封装在std的命名空间中
  • 打开方式
    • 统一打开
      using namespace std;
    • 逐条打开
      using std::cout; using std::cin;

C++标准库的资料库

STL的六大部件

组建之间的关系
C++标准库中的组件之间的关系图
C++标准库中的组件之间的关系图
  • 操作容器中的数据的算法是独立存在的
  • 容器和算法之间的桥梁是迭代器(一种泛化的指针)
  • 分配器负责给容器分配、释放内存空间
  • 仿函数,模仿函数一样的对象
  • 适配器,实现一些转换
//六大部件的使用
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>

using namespace std;

int main()
{
    int ia[6] = {27, 210, 12, 47, 109, 83};
    vector<int, allocator<int>> vi(ia, ia+6);
    //vector:Container
    //allocator<int>:Allocator,不写使用默认的
    
    cout << count_if(vi.begin(), vi.end(), not1(bind2nd(less<int>(), 40)));
    // count_if(...): Algorithm
    // not1(...): Function adapter(gegator)
    // bind2nd(....): function adapter(binder)
    // less<int>: function object

    return 0;
}
  • 关于算法的复杂度
    • 时间复杂度
时间复杂度与元素数量关系
时间复杂度与元素数量关系
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值