C++ STL标准库与泛型编程(一)概述

本文深入探讨C++ STL,包括容器的序列式、关联式和不定序容器,以及OOP与GP的对比。重点讨论了容器的测试、操作符重载和模板的使用,如类模板、函数模板、成员模板和特化。
摘要由CSDN通过智能技术生成

目录

使用C++标准库

一、STL体系结构

容器 — 结构与分类

1.Sequence Containers 序列式容器

2.Association Containers 关联式容器 —— 有 key 和 value ,适合做查找

3.Unordered Containers —— C++11不定序容器 之前也归于关联式容器  

容器的测试—限制与效率

 1.测试 array

2.测试 vector

3.测试 List 、Forward_list

4.测试 Deque 

5.测试 Multiset / Set

6.测试 Multimap / Map

7.使用 Unordered Set / Multiset

8.分配器 — 使用

二、OOP (面向对象编程) vs. GP (泛型编程)

1.GP 的思想是 将 datas 与 methods 分开来

2.为什么 list 有自己的 .sort() 函数,而不能用全局的 ::sort() 函数?

三、操作符重载与模板

1.作为全局函数、类成员函数、一个参数的函数、双目运算符函数 重载举例

2.模板

Class Template 类模板

Function Template 函数模板

Member Template 成员模板

Specialization 特化(与泛化相对)

Partial Specialization 局部特化


泛型编程,就是使用模板为主要工具来编写程序。其中没有太多的面向对象的观念,不涉及虚函数的使用。

使用C++标准库

C++标准库:以代码形式给出,放于各种头文件( header files )内,经过编译后才能使用。

所有新式的 headers 内的组件封装于 namespace “std” 。

一、STL体系结构

STL标准库约占C++标准库的85%,其中含有六大部件。 容器、算法、迭代器、仿函数、配接器、配置器。以及一些小的部分。

allocator 一般有默认值,显示化时,其参数类型要与容器类型匹配,否则编译出错。

count_if 算法 计数给定条件下的元素个数。

not1 函数适配器 表示条件反转,括号内的小于40语意变成大于等于40。

bind2nd 函数适配器 绑定第2参数,表示通过算法 less 将容器内所有元素与常量40绑定比较。

less 函数对象 比较小于40。

前闭后开区间 [ ),例如 对象都有c.begin() 和 c.end()连个函数, c.end()指向最后一个元素地址的下一个地址。 *c.end() ×

for(begin:end)基于范围的 for 循环

auto 省略类型定义,可由编译器自动判断类型

容器 — 结构与分类

1.Sequence Containers 序列式容器

Array 数组类  —— 连续的固定大小的空间,不能自动扩充

Vector 数组 —— 可由尾端扩充,由容器分配器自动完成

Deque 双队列 —— 双向扩充

List —— 双向链表                 Forward List —— 单链表

2.Association Containers 关联式容器 —— 有 key 和 value ,适合做查找

Set / Multiset 集合 —— 底层内存由红黑树(高度平衡二分树)实现,key 值就是 value

Map / Multimap 图 —— 有 key 与 value,Multi 表示 key 值可重复

3.Unordered Containers —— C++11不定序容器 之前也归于关联式容器  

基于 哈希表散列链表 (Hash Table Separate Chaining)实现

Unordered Set / Multiset 无序集合                   Unordered Map / Multimap 无序图

容器的测试—限制与效率

无需将所有的 include 操作放在所有程序的最前面,以 namespace 将每段程序分隔开,每段测试用例所需的头文件会更明了。而且 include 头文件重复时有保护机制,所以不用担心。

变量的声明可不用全部写在程序开始处,放在使用出利用凸排一目了然。

 1.测试 array

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值