C++ primer读书笔记(1)

写在前面的话:

最近发现要学的东西实在太多太多,让我感觉非常无所适从,不知从何开始,一方面想赶快学好各种东西,另一方面却又沉不下心,导致心态十分浮躁,以至于最后什么都不想干了。这时,突然看见一好友的签名:无欲速,无见小利;欲速,则不达;见小利,则大事不成。这对我现在的心态是一个很好的批判和矫正,可能我想要的东西太多,而且太着急,结果一事无成,现在就应该慢下来,脚踏实地,认认真真学好哪怕再简单的东西。所以从今天起,我会认真读C++primer这本书,并在博客上记录一些笔记,这便是此文的由来。


以前对于字符串的输入处理十分头疼,今天看书对我的一些疑问有了具体的解答:

cin

对于string类的输入,如果用cin>>,则会一直读入字符直到遇到whitespace,所谓whitespace,即空格(space)、换行(new line)、制表符(Tab)等等,然后将字符串存入string类中,其中不包含字符串前面以及后面的whitespace(注意,即使第一个遇到空格,读取不会停止,而是从第一个不是空格的字符开始读入)。例如

#include 
#include 
using std::cin;
using std::cout;
using std::endl;
using std::string;

int main()
{string s1;
 while (cin>>s1){ cout<

当输入“    hello    world     ”并按回车后,输出结果是“hello”下一行“world”,所有的空格都不会被保存入string,而且一次只从缓冲区取出一个字符串,另一个还会留在缓冲区中。

getline

用getline可以得到一行的输入,遇到换行符才会返回,值得注意的是,如果第一个就遇上换行符,getline会立刻返回,即返回一个空字符串,丢弃换行符。

另一个要注意的是getline需要接受两个参数,形式如getline(cin,line)。

还有一个意外发现就是,endl不仅有换行的作用,还有清空输出缓冲区(output buffer)的作用。

size_type

size_type是string类的一个配套类型(companion type),用于表示string中所含字符个数的数据类型,也是成员函数size()返回的类型。我们虽然不知道size_type具体是一个什么类型,但是它一定是一个unsigned类型,用来计数。之所以要这么设计,是为了使string类的实现不依赖于机器,因为不同的机器整型变量的表示范围是不同的,比如一个机器的int型为16位,那么它能表示的最大数为32767,但是我们希望string类能存下更多的字符,可能就要用的long long类型了,所以对于不同的机器,我们用同一个size_type来代表所需的可能不同的整型,就使其machine-independent了。这种思想随处可见,类似于封装和程序接口的思想,大大简化了上层的操作。

add +

string类一个让我感到比较新奇的操作就是+,两个string类可以加在一起,即拼接,一个string对象和一个字符串常量也可以相加,一个string对象还可以累加很多字符串常量,就想cin>>和cout<<一样。如

string s1="hello";

string s2="world";

string s3=s1+", ";

string s4="hello"+"world";

string s5=s1+", "+"world";

string s6="hello"+", "+s2;

s4和s6是不正确的,因为两个字符串常量不能相加,+的左边或右边必须有string对象,但是可以像s5那样累加。

小知识点:来源于C语言的头文件X.h也可写作cX,但是更推荐使用cX,因为cX中的名字都是在std namespace里的,而X.h里的名字不在其中。

 
 

你可能感兴趣的:(C++)