上一章的内置类型是C++直接定义的,比如数字和字符体现了大多数计算机硬件本身具备的能力,标准库定义了另一些高级类型,未直接实现到计算机硬件上。
3.1命名空间的using 声明
目前我们用到的库函数基本上都属于命名空间std, ::作用域操作符表示,编译器应该从操作符左侧寻找该名字,std:: 意思就是使用命名空间std里的cin, 头文件不应包含using声明。
- using namespace std。这句话其实就表示了所有的标准库函数都在标准命名空间std中进行了定义。这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。
- 当使用<,iostream>时,该头文件没有定义全局命名空间,必须使用namespace std,指明在哪里的命名空间,这样才能使用类似于 cout 这样的C++标识符
----------------命名空间-----------------
#include <iostream>
using namespace std;
namespace ZhangSan
{
int a=10;
}
namespace LiSi
{
int a=5;
}
void main()
{
int a=1;
cout<<"张三定义的a="<<ZhangSan::a<<endl;
cout<<"李四定义的a="<<LiSi::a<<endl;
cout<<"主函数定义的a="<<a<<endl;
}
3.2标准库类型string
string s1 = "huya";
string s2("huya");
使用getline读取一整行的字符串 有时我们需要在字符串中保留输入时的空格符号。
string line;
每次读取一行,直到文件末尾
while(getline(cin,line))
cout<<line<<endl;
size_type
字符串字面量和string是不同的类型
string s4 = s1 + "ab"; 正确
string s5 = "hello" + ","; 错误
string s6 = s1 + "," +"hello"; 正确,每个运算对象都是string
string s7 = "hello" + "," +s2; 错误
for(auto c : str)
cout<< c ;
3.2.3处理string的库函数
#include <cctype>
isalnum(c) 字母或者数字时候返回真
isalpha(c) c是字母时返回真
isdigit(c) c是数字时返回真
islower(c) c小写时返回真
isupper(c) c大写时返回真
isspace(c) c空格返回真
tolower(c) c如果是大写,返回小写,否则原样输出c
toupper(c) c如果小写,返回大写,否则原样输出c
处理每个字符. **for(declare : expr)**使用for语句改变字符串中的数字,使用引用就能改变它绑定的字符。
string s("hello world!!!);
for( auto &c : s )
c = toupper(c);
cout<<s;
3.3标准库类型vector
vector是一个类模版(class template),模版本身不是类或者函数,可以将模版堪称编译器生成类或者函数的一份说明。编译器根据模版创建类或函数的过程称为实例化。
vector<string> articles = {"a" , "an", "th"}
创建指定数量的元素
vector<int> ivec(10,-1);
vector<string> svec(10,"hi");
值初始化,如果容器内的元素是int则初试值自动设为0,如果是string,则元素由类默认初始化。
3.3.1初始化vector对象
一定要注意圆括号和花括号的区别。
vector<int> v1(10); 十个元素都是0
vector<int> v1{10}; 一个元素是10
vector<int> v1(10,1); 十个元素1
vector<int> v1{10,1}; 两个元素,10,1
3.3.2向vector中添加元素
push_back vector对象能高速增长。 不能用下表形式添加元素。
3.4迭代器介绍
3.5数组
3.6多位数组
小结
术语表
|