您的位置:首页 > 编程语言 > C语言/C++

《C++核心思想》学习笔记(4)

2015-08-14 17:21 423 查看
第十二章 流

1、文件流变量:(#include<fstream>)ifstream,ofstream,fstream;

2、ifstream input_date;(文件读操作,用于把数据输入到数据流)

//打开文件,从而将数据流和文件关联

input_date.open (“C:\\homework\\input.txt”);

★路径名反斜杠两次;

★如果用户是将文件名输入到字符串常量,则无需键入两次;

//读取数据

int n;

double x;

input_date>>n>>x;

//读取字符串

string s;

input_date>>s;

getline(input_date,s);

//读取单个字符

char ch;

input_date.get(ch);

//关闭文件

input_data.close();

3、ofstream output_data;(写文件操作,用于将数据流输出到文件)

output_data.open(“output.txt”);

output_data<<n<<””<<x;

output_data.put(ch);

output_data.close();

4、double read_data (ifstream & in)

流参数必须以引用方式传递,因为当读写操作后,流的数据结构将发生变化。

另外,如果以值方式传递,在将实参对象复制到形参对象in时,将会发生信息丢失。

5、字符串流类(#include<sstream>)





6、使用字符串流,可以方便地从字符串中读取数值。

 

第十四章 递归

1、为了保证所设计的递归算法的正确,必须满足一下两点:

(1)一定存在特定情况用以直接处理最简单的计算;

(2)每次递归后都以某种方式简化问题的计算;

 

第十五章 排序和查找

1、



2、链表的结束位置:.end

(1)它并不指向链表中的任何元素,而是指向链表的结尾;

(2)另外一个用途,在遍历链表时作为终止点;

3、(1)友元关系不能被继承;

   (2)友元关系是单向的;

   (3)友元关系不具有传递性;

4、栈:stack<string> s;

5、队列:queue<string> q;

6、集合:set<string> s;(它不考虑插入元素的顺序,但集合中的元素却总是有序的)

http://www.cnblogs.com/BeyondAnyTime/archive/2012/08/13/2636375.html

★set数据结构之所以会产生这样的结果,是因为它将值存放在一种特殊的树形结构中(一般是平衡二叉树)。每次插入一个元素时,该树都要重组;

★同数学中的集合类似,set容器将会忽略重复元素。所以,向set容器中插入重复元素将没有效果。如果想要插入重复元素,可用multiset容器代替set容器。利用count函数可以获得set容器或者multiset容器中某个元素出现的次数。

 


7、map——关联数组,与vector很类似,但map的下标可以为其他数据类型。

Eg;map <string double> scores;

 scores[“TOM”] = 90;

 scores[“Dick”] = 76;

 scores[“Harry”] = 100;

8、假如要在链表中查找特定的名字:

 


9、



 第十七章C++高级主题

1、为什么要重载??????

Eg:运算符++只为数值定义,而对象则不能使用它。如果要为Iterator类对象定义运算符++,就要将其重载。

2、重载输出操作符<<

P480



3、重载输入操作符>>

P480



4、重载运算符最好模仿数学或计算机科学中已有的运算符的使用。例如:为复数和矩阵运算重载“+”和“*”是合理的,或者为迭代器重载“++”和“*”并使其类似于指针也是合理的。

5、一个类可以有多个重载的构造函数,但是最多只能有一个无显示参数的析构函数。事实上,程序员不能显示的调用析构函数。

6、为什么要重载赋值运算符(=)?

P485

(1)通过复制对象来保证赋值的安全性;

(2)与其他重载运算符不同,operator=必须是一个成员函数;

(3)不能进行“自赋值”,测试条件(if(this!=b));

(4)返回一个this指针(*this);



7、在任何涉及动态内存管理的类中都必须实现:

(1)赋值运算符函数;(作用)

(2)复制构造函数;(作用)

(3)析构函数;(作用)

★定义这三个函数时应采用下面的逻辑步骤:



8、



9、



10、类模板:





11、一般来说,使用嵌套类只有一个原因:将一个类的类名置于另一个类的作用域之内。

12、与类不同,名字空间是开放的,可再给出一个namespace块,在其中添加任意项。

13、引入名字空间是为了避免命名冲突,所以应该使用含义明确、通常较长的名字,但是可以给这个较长的名字空间起一个较短的别名。



14、除了std名字空间以外,在使用其他的名字空间时,不要使用using声明;

15、Assert机制在任何错误使用参数时,程序都会退出并给出一个错误报告,指出产生问题的原因;

 但是在现实生活中,不能终止设备控制程序的运行,而是要通知程序的其他部分,让他们处理这种错误情况;

16、catch语句的次序很重要:发生异常时,异常处理机制自上而下的匹配异常处理,并且执行第一个匹配的异常处理。

17、使用异常将出错条件传给特定的异常处理程序。当检测到一个出错条件时,可以使用throw语句抛出异常信号。其中某个调用函数必须提供一个带有catch语句的try块,要求catch语句能够匹配异常类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++