3.1命名空间的using声明
std::cin。这些名字都用了::操作符,该操作符是作用域操作符。他的含义是右操作数的名字可以再左操作数的作用域中找到。因此,std::cin的意思是说所需名字cin实在命名空间std中定义的。显然,通过这种符号引用标准库名字的方式是非常麻烦的。
使用using声明可以再不需要假钱准namespace-name::的情况下访问命名空间中的名字。
using声明的形式如下:
using namespace::name;
一旦使用了using声明,我们就可以直接引用名字,而不需要在引用该名字的命名空间
2 使用标准库类型的类定义
有一种情况下,必须总是使用完全限定的标准库名字:在头文件中。理由是头文件的内容会被预处理器复制到程序中,用#include包含文件时,相当于头文件中的文本将成为我们编写的文件的一部分。如果在头文件中放置using声明,就相当于在包含盖头文件的每个程序中都放置了同一using声明。
3.2标准库string类型
string类型支持长度可变的字符串,C++彼岸准哭将负责管理与储存字符相关的内存,以及提供各种有用的操作。标准库string类型的目的就是满足对字符串的一般应用。
string对象的定义和初始化
string标准库支持几个构造函数。构造函数是一个特殊成员函数,定义如何初始化该类型的对象。
3.2.2 string对象的读写
我们之前学习了用iostream标准库来读写内置类型的值,如int,double等。同理,我们也可以用iostream和string标准库,使用标准输入输出操作符来读写string对象:
int main ()
{
string s;
cin>>s;
cout << s << endl;
return 0;
}
以上程序首先定义命名为s的string,第二行代码:
cin >> s;
从标准输入读取string,并将读入的船存储在s中。string类型的输入操作符:
读取并忽略开头所有的空白字符(如空格,换行符,制表符)。
读取字符直至再次遇到空白字符,读取终止。
因此,如果输入到程序的是“ Hello World ”,则屏幕上输出的是“Hello”,而不包含任何空格
输入和输出操作的行为与内置类型操作符基本相似。尤其是,这些操作符返回左操作数作为运算结果。因此,我们可以把多个读操作或多个写操作放到一起
1 读入位置树木的string对象
和内置类型的输入操作符一样,string的输入操作符也会返回所读的数据流。因此,可以把输入操作作为判断条件,这与读取数据类型的程序做法是一样的,下面程序将从标准输入读取一组string对象,然后再标准输出上逐行输出:
int main ()
{
string word;
while (cin >> word)
cout << word << endl ;
return 0;
}
上列中,用输入操作符来读取string对象。该操作符返回所读的istream对象,并在读取结束后,作为while的判断条件。如果输入流是有效的,即还未到达文件尾且未遇到无效输入,则执行while循环体,并将读取到的字符串输出到标准输出。如果到达了文件尾,则跳出while循环。
2 用getline 读取整行文本
另外还有一个有用的string IO操作:getline。这个函数接受两个参数:一个输入流对象和一个string对象。getline函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符。和输入操作符不一样的是,getline并不忽略行开头的换行符。只要getline遇到换行符,即便他是输入的第一个字符,getline也将停止读入并返回。如果第一个字符就是换行符,则string参数将被置为空string。
getline函数将istream参数作为返回值,和输入操作符一样晔把它作为判断条件。
int main ()
{
string line;
while (getline (cin,line))
cont << line << endl;
return 0 ;
}
由于line不含换行符,若要逐行输出需要自动添加。照常,我们用endl来输出一个换行符并刷新到缓冲区
3.2.3 string对象的操作
1 string的size和empty操作
string对象的长度指的是string对象中字符的个数,可以通过size操作获取;
int main ()
{
string st( "The expense of spirit \n");
cout << "The size of " << st << "is" << st.size() << " characters, including the newline " << endl ;
return 0 ;
}
2 string :: size_type 类型
从逻辑上讲, size()成员函数似乎应该返回整型数值,事实上,size操作返回的是string::size_type类型的值。我们需要对这种类型做一些解释。
string类类型和许多其他库类型都定义了一些配套类型。通过这些配套类型,库类型的使用就能与机器无关。size_type就是这些配套类的一种。它定义为与unsigned型具有相同的含义,而且可以保证足够大能够存储任意string对象的长度,为了使用由string类型定义的size_type类型,程序员必须加上作用域操作符来说明所使用的size_type 类型由string类来定义的。