C++标准库类型
--学习笔记
一、命名空间的using声明
usingstd::cin;
usingstd::cout;
usingstd::string;
二、标准库string类型
1、string的类型和初始化
几种初始化string对象的方式
string s1; | 默认构造函数,s1为空串 |
string s2(s1); | 将s2初始化为s1的一个副本 |
string s3(“value”); | 将s3初始化为一个字符串面值副本 |
string s4(n,”c”) | 将s4初始化为字符‘c’的n个副本 |
2、读入未知数目的string对象
和内置类型的输入操作符一样,string的输入操作符也会返回所读的数据流,因此可以把输入操作作为判断条件。如:
{
string word;
while(cin>>word)
cout<<word<<endl;
return 0;
}
3、用getline读取整行文本
getline();读入整行数据流,不读取换行符,遇到换行符就结束输入。如:
int main()
{
string word;
while(getline(cin,line))
cout<<line<<endl;
return 0;
}
4、string对象的操作
string操作
s.empty(); | 如果s为空串,则返回true,否则返回false |
s.size(); | 返回s中的字符个数 |
s[n] | 返回s中位置为n的字符,位置从0开始计数 |
s1+s2 | 把s1、s2连接成一个新的字符串,返回新生产的字符串 |
s1=s2 | 将s1的内容替换成s2的副本 |
v1==v2 | 比较s1、s2的内容是否相同 |
!=,<,>,<=等 | 保持操作符惯有的含义 |
(1)、string 的size和empty操作
string对象的长度是指string对象中的字符个数,可以通过size操作获取。
如:
string str;
str.size();//获取字符串的长度
返回值为string::size_type类型
str.empty();//判断是否为空
(2)、string::size_type类型
(3)、string关系操作符(即匹配ascall码)
==:string对象的长度相同,且含有相同的字符。
!=、<、<=、>=、<、>:
如果两个string对象长度不同,且短的string对象与长的string对象的前面部分匹配,则短的string对象小于长的string对象;
如果两个string对象的字符不同,则比较第一个不匹配的字符。
5、string对象的赋值
如:
string str1,str2=”hello”;
s1=s2;
赋值的过程:必须先把str1所占用的内存释放掉,再分配给str1足够存放str2副本的内存控件。最后把str2中的所有字符复制到新分配的内存空间。
6、两个string对象相加
str3=str1+str2;
s1+=s2;
7、和字符串字面值的连接
str3=str1+”hello”+str1+”!”;
注意:当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的。
8、通过string对象获取字符
通过下标或者索引(index)获取字符,即str[i];注意下标超界引起的溢出问题。
9、string对象中的字符处理
cctype定义的函数
isalnum(c) | 如果c为字母或数字,则为true |
isalpha(c) | 如果c为字母,则为true |
iscntrl(c) | 如果c是控制字符,则为true |
isdigit(c) | 如果c是数字,则为true |
isgraph(c) | 如果c不是空格,但可打印,则为true |
islower(c) | 如果c是小写字母,则为true |
isprint(c) | 如果c是可打印的字符,则为true |
ispunct(c) | 如果c为标点符号,则为true |
isspace(c) | 如果c为空白字符,则为true |
isupper(c) | 如果c为大写字母,则为true |
isxdigit(c) | 如果c为十六进制数,则为true |
tolower(c) | 如果cs大写字母,则转换成其小写字母形式,否则直接返回c |
toupper(c) | 如果cs小写字母,则转换成其大写字母形式,否则直接返回c |
如:1
将字母全部转换为小写字母:
for(string::size_typeindex=0; index!=s.size(); ++index)
s[index]=tolower(s[index]); cout<<s<<endl;
如:2
计算字符串中标点的个数:
strings(“hello world!!!”);
string::size_typecountNum=0;
for(string::size_typeindex=0; index!=s.size(); ++index)
if(ispunct(s[index]) )
++countNum;
cout<<countNum<<endl;
三、标准库vector类型
vector不是一种数据类型,而只是一个类模板,可以用来定义任意多种数据类型。
1、vector对象的定义和初始化
几种初始化vector对象的方式
vector<T> v1; | vector保存类型为T的对象,默认构造函数,v1为空 |
vector<T> v2(v1); | v2是v1的一个副本 |
vector<T> v3(n,i); | v3包含n个值为i的元素 |
vector<T> v4(n); | v4含有值初始化的元素的n个副本 |
(1)、创建确定个数的元素
如:vector<int> ivec1;
vector<int> ivec2(vec1);
vector<int> ivec3(10,-1);
vector<string> ivec(10,”hi!”);
注:vector对象动态增长,可以增加,删除
2、值初始化
如果没有指定元素的初始化式,那么标准库将自行提供一个元素初始值进行值初始化。
vector<int>fvec(10);//十个元素初始化为0
vector<string>svec(10);//十个元素初始化为空字符串
3、vector对象的操作
vector操作
v.empty() | 如果v为空,则返回true,否则返回false |
v.size() | 返回v中元素的个数 |
v.push_back(t) | 在v的末尾增加一个值为t的元素 |
v[n] | 返回v中位置为n的元素 |
v1=v2 | 把v1的元素替换成v2中元素的副本 |
va=v2 | 如果v1、v2相等,则返回true |
!= < >… | 保持这些操作惯有的含义 |
(1)、vector对象的size
empty和size的操作类似于string类型的相关操作。成员函数size返回相应vector类定义的size_type的值。
使用size_type类型时,必须定义类型。vector类型总是包括vector的元素类型:
vector<int>::size_type
(2)、向vector添加元素
push_back();接受一个元素值,并将它作为一个新的元素添加到vector对象的后面,也就是“插入(push)”到vector对象的“后面(back)”:
stringword;
vector<string>text;
while(cin>>word)
{
text.push_back(word);
}
4、vector的下标操作
vector的下标操作,类似于string。
如:下列循环,将vector的每个元素都重置为0;
for(vector<int>::size_typeindex=0; index!=ivec.size(); ++index)
ivec[index]=0;
vector的下标操作不能添加成员,只能获取已存在的元素。