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 第三版)

posted @ 2010-03-09 22:28  鱼缸里的小鱼  Views(255)  Comments(0)    收藏  举报