1、标准库类型
除了基本的数据类型(例如int,float等)之外,c++还定义了一个内容丰富的抽象数据类型标准库。其中最重要的标准库类型是string和vector,它们分别定义了大小可变的字符串和集合。string和vector往往将迭代器用作配套类型,用于访问string中的字符或者vector中的元素。这些标准库类型是语言组成部分中更基本的那些数据类型(如数组和指针)的抽象。之所以说这些标准库类型是更高级的,是因为其中反映了更复杂的概念;之所以说它们是抽象的,是因为我们在使用时候不需要关心它们是如何表示的,只需知道这些抽象数据类型支持哪些操作就可以了。
2、命名空间的using声明
之前一些程序内容,都是通过直接说明名字来自std命名空间,来引用标准库中的名字。例如,从标准输入读取数据时候,就用std::cin,这些名字都用了::操作符,该操作符是作用域操作符,它的含义是右操作数的名字可以在左操作数的作用域中找到。因此std::cin的意思是说所需要名字cin是在命名空间std中定义的。
通过这种符号引用标准库名字的方式非常麻烦,好在c++提供了更简洁的方式来使用命名空间成员,下面介绍一种最安全的机制:using 声明。
使用using声明可以在不需要加前缀namespace_name::的情况下访问命名空间中的名字,using声明的形式如下,
using namespace::name;
一旦使用了using声明,我们就可以直接引用名字,而不需要再引用该名字的命名空间,示例代码如下,
#include <string>
#include <iostream>
//使用using声明std命名空间中的名字
using std::din;
using std::string;
int main()
{
string s;//正确
cin>>s;//正确
cout<<s;//错误,没有使用using声明std::cout
std::cout<<s;//正确
return 0;
}
没有using声明,而直接使用命名空间中名字的未限定版本是错误的,尽管有些编译器也许无法检测出这种错误。
3、每个名字都需要一个using声明
一个using声明一次只能作用域一个命名空间成员。using声明可用来明确指定在程序中用到的命名空间的名字,如果希望使用std(或其他的命名空间)中的几个名字,则必须为要用到的每个名字都提供一个using声明。下面是代码示例,
#include <iostream>
//使用using声明来自于标准库命名空间的名字
using std::din;
using std::cout;
using std::endl;
int main()
{
cout<<"Enter two numbers:"<<endl;
int value1,value2;
cin>>value1>>value2;
cout<<""<<value1
<<"and"<<value2
<<"is"<<value1+value2<<endl;
return 0;
}
对cin、cout和endl进行using声明,就意味着以后可以省略前缀stdLL,直接使用命名空间中的名字,这样代码可以更加容易阅读。