C++第五章笔记

2014/10/9 posted in  C++

for循环的步骤:

  • 设置初始值
  • 执行测试,看看循环是否应当继续进行
  • 执行循环操作
  • 更新用于测试的值

在C++中,常在for和while等控制语句中,如for,在for和括号之间增写一个空格,以强化控制语句与函数调用之间的区别.。

前缀自增减会将值加1减1,然后返回结果,而后缀自增减首先要创建一个副本,将值加1减1,然后将复制的副本返回,因此,对于类来说,前缀版本的效率要比后缀版本的效率高。

对于内置类型,采用前后缀不会有差别,但对于用户定义的类型,前缀格式的效率更高。

自增减的优先级与相同,但如果同时出现会从右到左执行*(注意指针上的应用)。

string不使用空字符来标记字符串的末尾。

在头文件ctime中,提供了clock()函数来调用系统时间,和循环配合使用可以有效的控制和实现相关程序停顿等问题。

ctime中还定义了CLOCKS_PER_SEC来标记系统的时间与秒的转换参数。

cin >> secs;
clock_t delay = secs * CLOCKS_PER_SEC;
clock_t start = clock();
while(clock() - start

C++11新增了一种基于范围的for循环,简化了一种常见的任务:对数组(或容器类)的每个元素执行相同的操作。

double num[5] = {1.0,5.2,5.4,5.1,0.2};

for(double x : num)
cout

很C++11总是给人高大上的感觉。

但是要注意的是,如果需要修改x的值,则需要添加上引用。

如果和各种容器配合,这种用法将更加方便,类似:

for(int x : {1,2,3,4,5,6})
cout

用cin输入的时候,文件结尾依然是EOF,但是cin是如何判断EOF的呢?

之前用C做题,写的是while(scanf(...) != EOF)

而C++写的是while(cin >> x)

看起来没有任何和EOF有关的判断,但是cin当检测到EOF时是有标记的的

在第四章写过失效位(failbit),其实这里和这个类似,用的是eofbit,如果cin检测到EOF,则,cin.eof()将返回bool值true,否则返回false。

其实无论是failbit和eofbit,只要有一个被标记为1,则cin.fail()则为true,然后cin便失效,不再工作,需要cin.clear()清除标记。

C++也有怀旧情结,因此广泛支持C语言,甚至一些写法故意的怀旧,比如为了模仿getchar和putchar

cin和cout可以:

ch = cin.get();
cout.put(ch);

当然,很明显,这是函数重载实现的(《C++ PP》讲的是这么的慢,小笨球总结的谭浩强那本都讲完重载了,这个还在讲cin)。