C++标准库类型

来源:互联网 发布:日语n1网络课程 编辑:程序博客网 时间:2024/05/22 06:32

一、命名空间的using声明

using std::cin;

using std::cout;

using std::string;

二、标准库string类型

1string的类型和初始化

几种初始化string对象的方式

string s1

默认构造函数,s1为空串

string s2(s1);

s2初始化为s1的一个副本

string s3(“value”);

s3初始化为一个字符串面值副本

string s4(n,”c”)

s4初始化为字符‘c’的n个副本

2、读入未知数目的string对象

和内置类型的输入操作符一样,string的输入操作符也会返回所读的数据流,因此可以把输入操作作为判断条件。如:

int main()

{

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;

}

4string对象的操作

string操作

s.empty();

如果s为空串,则返回true,否则返回false

s.size();

返回s中的字符个数

s[n]

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

s1+s2

s1s2连接成一个新的字符串,返回新生产的字符串

s1=s2

s1的内容替换成s2的副本

v1==v2

比较s1s2的内容是否相同

!=,<,>,<=

保持操作符惯有的含义

(1)string sizeempty操作

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对象的字符不同,则比较第一个不匹配的字符。

5string对象的赋值

如:

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];注意下标超界引起的溢出问题。

9string对象中的字符处理

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_type index=0; index!=s.size(); ++index)

s[index]=tolower(s[index]);   cout<<s<<endl;

如:2

计算字符串中标点的个数:

string s(“hello world!!!”);

string::size_type countNum=0;

for(string::size_type index=0; index!=s.size(); ++index)

if(ispunct( s[index]) )

++countNum;

cout<<countNum<<endl;

三、标准库vector类型

vector不是一种数据类型,而只是一个类模板,可以用来定义任意多种数据类型。

1vector对象的定义和初始化

几种初始化vector对象的方式

vector<T> v1;

vector保存类型为T的对象,默认构造函数,v1为空

vector<T> v2(v1);

v2v1的一个副本

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);//十个元素初始化为空字符串

3vector对象的操作

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

如果v1v2相等,则返回true

!= < >

保持这些操作惯有的含义

(1)vector对象的size

emptysize的操作类似于string类型的相关操作。成员函数size返回相应vector类定义的size_type的值。

使用size_type类型时,必须定义类型。vector类型总是包括vector的元素类型:

vector<int>::size_type

(2)、向vector添加元素

push_back();接受一个元素值,并将它作为一个新的元素添加到vector对象的后面,也就是“插入(push)”到vector对象的“后面(back)”:

string word;

vector<string> text;

while(cin>>word)

{

text.push_back(word);

}

4vector的下标操作

vector的下标操作,类似于string

如:下列循环,将vector的每个元素都重置为0

for(vector<int>::size_type index=0; index!=ivec.size(); ++index)

ivec[index]=0;

vector的下标操作不能添加成员,只能获取已存在的元素。