C++学习笔记6
泛型算法
1. 算法怎样工作
每一个泛型算法的实现都独立于单独的容器。这些算法还是大而不全的,而且不依赖于容器存储的元素类型。为了知道算法怎样工作,让我们深入了解find 操作。该操作的任务是在一个未排序的元素集合中查找特定的元素。从概念上看,find必须包括下面步骤:
1. 顺序检查每一个元素。
2. 假设当前元素等于要查找的值,那么返回指向该元素的迭代器。
3. 否则,检查下一个元素,反复步骤2,直到找到这个值,或者检查全然部的元素为止。
4. 假设已经到达集合末尾,并且还未找到该值,则返回某个值,指明要查找的值在这个集合中不存在。
2. 排序算法
标准库定义了四种不同的排序算法,上面仅仅使用了最简单的sort 算法,
使words 按字典次序排列。除了sort 之外,标准库还定义了stable_sort 算法,stable_sort保留相等元素的原始相对位置。通常,对于已排序的序列,我
们并不关心其相等元素的相对位置,毕竟,这些元素是相等的。可是,在这个应用中,我们将“相等”定义为“同样的长度”,有着同样长度的元素还能以字典
次序的不同而区分。调用stable_sort 后,对于长度同样的元素,将保留其字典顺序。
3. 类定义
最简单地说,类就是定义了一个新的类型和一个新作用域。每一个类能够没有成员,也能够定义多个成员,成员能够是数据、函数或类型别名。
在类内部,声明成员函数是必需的,而定义成员函数则是可选的。在类内部定义的函数默觉得 inline
在类外部定义的成员函数必须指明它们是在类的作用域中。
Sales_item::avg_price 的定义使用作用域操作符来指明这是 Sales_item类中avg_price 函数的定义。
4. 将keywordconst 加在形參表之后,就能够将成员函数声明为常量:
double avg_price() const;
const 成员不能改变其所操作的对象的数据成员。const必须同一时候出如今声明和定义中,若仅仅出如今当中一处,就会出现一个编译时错误。
5. 数据抽象
数据抽象是一种依赖于接口和实现分离的编程(和设计)技术。类设计者必须关心类是怎样实现的,但使用该类的程序猿不必了解这些细节。
相反,使用一个类型的程序猿仅需了解类型的接口,他们能够抽象地考虑该类型做什么,而不必详细地考虑该类型怎样工作。
6. 封装
封装是一项低层次的元素组合起来的形成新的、高层次实体珠技术.函数是封装的一种形式,。相同地,类也是一个封装的实体.被封装的元素隐藏了它们的实现细节——能够调用一个函数但不能訪问它所运行的语句。
6. 訪问标号
能够在随意的訪问标号出现之前定义类成员。在类的左花括号之后、第一个訪问标号之前定义成员的訪问级别,其值依赖于类是怎样定义的。
假设类是用struct keyword定义的,则在第一个訪问标号之前的成员是公有的;假设类是用class keyword是定义的,则这些成员是私有的。
一个訪问标号能够出现的次数一般是没有限制的。每一个訪问标号指定了随后的成员定义的訪问级别。这个指定的訪问级别持续有效,直到遇到下一个訪问标号或看到类定义体的右花括号为止。
7. 数据抽象和封装提供了两个重要长处:
• 避免类内部出现无意的、可能破坏对象状态的用户级错误。
• 随时间推移能够依据需求改变或缺陷(bug)报告来完美类实现,而无须改变用户级代码。
8. 类声明与类定义
一旦遇到右花括号,类的定义就结束了。而且一旦定义了类,那以我们就知道了全部的类成员,以及存储该类的对象所需的存储空间。
在一个给定的源文件里,一个类仅仅能被定义一次。假设在多个文件里定义一个类,那么每一个文件里的定义必须是全然同样的。
9. 能够声明一个类而不定义它:
class Screen; //declaration of the Screen class
这个声明,有时称为前向声明(forwarddeclaraton),在程序中引入了类类型的Screen。在声明之后、定义之前,类Screen 是一个不全然类型(incompetetype),即已知Screen 是一个类型,但不知道包括哪些成员。
不全然类型(incompletetype)仅仅能以有限方式使用。不能定义该类型的对象。不全然类型仅仅能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形參类型或返回类型的函数。
在创建类的对象之前,必须完整地定义该类。必须定义类,而不仅仅是声明类,这样,编译器就会给类的对象预定对应的存储空间。相同地,在使用引用或指针訪问类的成员之前,必须已经定义类。
10. 为类的成员使用类声明
仅仅有当类定义已经在前面出现过,数据成员才干被指定为该类类型。假设该类型是不全然类型,那么数据成员仅仅能是指向该类类型的指针或引用。
class LinkScreen {
Screen window;
LinkScreen *next;
LinkScreen *prev;
};
由于仅仅有当类定义体完毕后才干定义类,因此类不能具有自身类型的数据成员。然而,仅仅要类名一出现就能够觉得该类已声明。因此,类的数据成员能够是指向自身类型的指针或引用:
11. 类对象
定义一个类时,也就是定义了一个类型。一旦定义了类,就能够定义该类型的对象。
定义对象时,将为其分配存储空间,但(一般而言)定义类型时不进行存储分配:
class Sales_item {
public:
// operations onSales_item objects
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
定义了一个新的类型,但没有进行存储分配。
12. 定义类类型的对象
定义了一个类类型之后,能够按下面两种方式使用。
• 将类的名字直接用作类型名。
• 指定keywordclass 或struct,后面跟着类的名字:
Sales_item item1; //default initialized object of type Sales_item
class Sales_itemitem1; // equivalent definition of item1
两种引用类类型方法是等价的。另外一种方法是从C 继承而来的,在C++ 中仍然有效。第一种更为简练,由C++ 语言引入,使得类类型更easy使用。
C++学习笔记6的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- 手机触屏的js事件
处理Touch事件能让你跟踪用户的每一根手指的位置.你可以绑定以下四种Touch事件: 1.touchstart: // 手指放到屏幕上的时候触发 2.touchmove: // ...
- C语言struct类型
在实际问题中,一组数据往往具有不同的数据类型.例如, 在学生登记表中,姓名应为字符型:学号可为整型或字符型: 年龄应为整型:性别应为字符型:成绩可为整型或实型. 显然不能用一个数组来存放这一组数据. ...
- Linux中的网络
在windows 中表示一张网卡用本地连接1,本地连接2这种方式来表示:而在linux 中用的是etho,eth1 等等这样的东西来表示的.
- Oracle inner join、left join、right join 、+左边或者右边的区别
我们以Oracle自带的表来做例子 主要两张表:dept.emp 一个是部门,一个是员工表结构如下: emp name null? Type Empno not null number(4) enam ...
- 限制**类型物料不能输入BOM
应用 Oracle Bill Of Materiel 层 Level Function 函数名 Funcgtion Name CUX_BOMFDBOM 表单名 Form Name CUXBOMFD ...
- eclipse 快捷方式大全
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当 ...
- Cortex-M3学习日志(一)-- GPIO实验
因为项目所需,所以不得不开始研究M3,我用的是NXP公司的LPC1768这个芯片,它是具有三级流水线的哈佛结构,带独立的本地指令和数据总线以及用于外设的稍微低性能的第三条总线,还包含一个支持随机跳转的 ...
- Silverlight Socket 实现收发信息
原文 http://www.cnblogs.com/ZetaChow/archive/2009/05/16/2237347.html 刚接触Silverlight的时候,除了其异步应用WCF.流媒体. ...
- sharepoint 2013 列表和库标签 元数据导航配置(2)
接前面提到的,如何创建一个术语库.sharepoint 2013 列表和库标签 元数据导航配置(1), 现在要做的,就是如何在自定义或者文档库中使用这个术语库,实现标签功能,通过这些标签,找到对应的文 ...
- HP DL360 G7通过iLO部署系统
HPDL360 G7通过iLO部署系统 HP DL360 G7是没有光驱的服务器,可使用USB外置光驱.PXE网络安装.ILO方式的安装操作系统 一.HP iLO 简介 iLO 是一组芯片,内部是vx ...