C++ Primer摘抄(二)
输入输出初步(1.5)
iostream
标准输入 standard input; cin
标准输出 standard output; cout
标准错误 standard error; cerr,通常用来产生警告或者错误信息
文件输入输出
fstream,把in_file的单词逐个拷贝到out_file里,以空格或者回车分隔
#include<iostream> #include<fstream> #include<string> using namespace std; int main() { ofstream outfile("out_file.txt"); ifstream infile("in_file.txt"); if(!infile) { cerr<<"error:unable to open input file"<<endl; return -1; } if(!outfile) { cerr<<"error:unable to open output file"<<endl; return -2; } string word; while(infile >> word) outfile << word << " "; getchar(); return 0; }
in_file.txt为
-------------
Hello
world
--------------
或者
-------------
Hello world
------------
都会在out_file中得到:Hello world
内置数组数据类型(2.1)
数组array是一种顺序结构,虽然,C++对数组类型提供了内置支持,但是这种支持仅限于“用来读写单个元素”的机制。C++不支持数组的抽象(abstraction),也不支持对整个数组的操作,只能通过自己写程序实现(当然有现成的)。
数组时是C语言继承来的,它反映了数组于其进行操作的算法的分离,而这正是过程化程序设计的特征。
动态内存的分配和指针(2.2)
静态分配内存和动态分配内存 灵活和效率
int ival = 1024; //一个指向int类型的指针 int *pint; //取地址符address-of,把ival的地址赋给pint pint = &ival;
为了访问pint所指向的实际对象,我们必须先用解引用dereference操作符(*)来解除pint的引用,但是这样指针间接操作ival没有什么实际好处,这样做比直接操作ival的效率要低,而且又容易出错。
//通过pint间接地给ival加 *pint = *pint + 1; //等价于 ival = ival + 1;
静态内存和动态内存的两个主要的区别是:
1、静态对象是有名字的变量,我们直接对其进行操作。而动态对象是没有名字的变量,我们通过指针间接地对他进行操作。
2、静态对象的分配与释放由编译器自动处理。程序员需要理解这一点,但是不需要做任何事情。相反,动态内存对象的分配与释放,必须由程序员显式的管理,它通过new和delete两个表达式来完成。
new表达式的两个版本:
一、适用于分配特定类型的单个对象。下面分配了一个没有名字的int类型,对象初始值是1024,然后,表达式返回对象在内存中的地址。
int *pint = new int(1024); delete pint;
二、用于分配特定类型和维数的数组。下面分配了一个含有四个整数的数组。不幸的是,我们没有办法给动态分配的数组的每个元素显式的指定一个初始值。
int *pia = new int[4] delete [] pia;
英文术语:
dimension 一维
subscript 下标
off-by-one 一位偏移错误
dereference 解引用
memory leak 内存泄露
(Page15-Page23,C++ Primer 第三版)

浙公网安备 33010602011771号