第三张 标准库类型(using,string,vector)

时间:2020-11-26 14:14:31

第三张  标准库类型(usingstringvector

一、命名空间的using声明

1、使用using声明,我们就可以直接引用名字,而不需要再引用该名字的命名空间:(参考下面部分代码)

#include <string>

#include <iostream>

using std::cin;

using std::string ;

int main()

{

string s; 正确,原来std::string,现在改成string

cin >> s; 正确

cout << s; 有错,因为上面没有using std::cout

std:: cout << s; 正确

需要注意的是,每个名字都要一个using声明。此外,在一种情况下,必须总是使用完全限定的标准库名字,即在头文件中。(会引起不必要的错误)

二、标准库string类型

1string标准库支持几个构造函数:

String s1; 默认构造函数,s1为空串

String s2(s1); s2初始化为s1的一个副本

String s3("Value") ; s3初始化为一个字符串字面值副本

String s4(n,'c'); s4初始化为字符‘c’的n个副本

2string 对象的读写

string s

   Cin >> s;   string类型的输入操作符:读取并忽略开头所有的空白字符(空格,换行符,制表符); 读取字符直到再次遇到空白字符,才终止读取。如:输入“hello world”,输出 “hello”,且不含任何空格。

3、用getline 读取整行文本

Getline接受两个参数,getlinecinline); 函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符。另外,getline并不忽略行开头的换行符,只要getline遇到换行符,即便是第一个字符,也将停止输入并返回。如果第一个字符是换行符,则line为空串。

4string对象的操作

假设 string s

S.empty()  如果s为空串,则返回true,否则返回false

S.size()    返回s中字符的个数

S[n]       返回s中位置为n的字符,从0开始计数。

S1+s2 把两个串连接成一个新字符串,并返回。

S1=s2 s1内容替换为s2的副本

S1==s2 比较s1,s2的内容,相等则返回true,否则返回false

!=, < , <= , > , >=  C语言类似.

注意:(1s.size()返回的是string::std::size_type类型的值,特别的,不能将这个值赋给一个int 变量!

2)连接字符串字面值时候,操作符的左右操作数必须至少有一个是string类型的。

例如: string s3= s1+ " , " ;           string s5=s1+" , "+ "world" ; s5中,先是将s1" , " 相加组成一个新的string对象,然后再与"world " 相加。

错误示范: string  s4= "hello " + " , " ; 两个字符串字面值相加是非法的。

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

(3)在string对象的索引变量最好也是用string::size_type类型,因为方便比较:  ix != s.size()  (越界控制)

(4)String对象中字符的处理,见C++Primer P77

三、标准库vector 类型

1vector是同一类型的对象的集合,每个对象都有一个对应的整数索引值。常称vector为容器,它包含的对象都必须是同一类型的。(假设 用using做出了相应声明: #include<vector>

 Using std:: vector ;

2、定义vector的对象:需要指定类型和一个变量的列表。

如:vector<int>  ivec;

3vector对象的定义和初始化

四个构造函数:

1vector<T>  v1; 类型为T的对象v1为空

(2)  vector<T>  v2(v1);  v2v1的一个副本

(3)  vector<T>  v3(n,i); v3包含n个值为i的元素

(4)  vector<T>  v4(n); v4含有值初始化的元素的n个副本

4vector对象的操作

  v.empty()   如果v为空,则返回true,否则返回false

v.size()     返回v中元素的个数

v.push_back(t) v的末尾增加一个值为t的元素

v[n]        返回v中位置为n的元素,从0开始计数。

v1=v2 把v1元素替换为v2中元素的副本

v1==v2 如果v1,v2相等则返回true,否则返回false

!=, < , <= , > , >=  C语言类似.

注意:使用size_type类型时,必须指出该类型时在哪里定义的。Vector类型总是包括vector的元素类型: vector<int> :: size_type 

5、下标操作不能添加元素

因为下标只能用于获取已存在的元素,而当一个空对象没有元素时,是无法通过下标操作获取元素的。已存在的元素才能用下标操作进行索引,而通过下标操作赋值时,不会添加任何元素。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

今天学习了const,typedef,枚举和现在贴上来的标准库string类型和vector类型,以及using命名声明。重点是现在贴上来的笔记了,感觉在看书过程中思路还算清晰吧,遇到一个小问题,问师兄和百度后最终解决了,就是using在头文件的使用,在上面的笔记也有记录。 今晚师兄跟我聊了一下vector类型,他告诉我,如果在学完这章书后能够用vector实现一个栈,那就算是真正学懂了!这也算学完这章书的一个小目标吧,今天写在这里,我会在学完这章后写一个出来的,到时候再贴上!加油!          23:00