面向对象技术(C++ Primer)第3章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第三章标准库类型11.命名空间的using声明2.标准库string类型3.标准库vector类型4.迭代器简介5.标准库bitset类型3.1命名空间的声明using2使用using声明可以在不需要加前缀namespace_name::的情况下访问命名空间中的名字:usingnamespace::name#includestring#includeiostreamusingstd::cin;usingstd::string;Intmain(){strings;//ok,stringisnowasynonymforstd::stringcins;//ok,cinisasynonymforstd::cincouts;//error;nousingdecaration,mustusefullnamestd::couts;//ok,explicitlyusecoutfromnamespacestd}3.2标准库string类型3标准库string类型的目的就是满足对字符串的一般应用。主要是内存管理和提供操作:#includestringUsingstd::string几种初始化string对象的方式strings1;//使用默认构造函数初始化,s1为空串strings2(s1);//将s2初始化为s1的一个副本strings3(“value”);//将s3初始化为字符串副本Strings4(n,’c’);//将s4初始化为’c’的n个副本string对象的读写4#includeiostream#includestringusingstd::cin;usingstd::string;usingstd::cout;usingstd::endl;Intmain(){strings;//emptystringcins;//readwhitespace-separatedstringintoscoutsendl;//writestotheoutputreturn0;}读入未知数目的string对象5intmain(){stringword;//readuntilendoffile,wrtingeachwordtoanewlinewhile(cinword)coutwordendl;return0;}用getline读取整行文本6Intmain(){stringline;//readlineattimeuntilendoffilewhile(getline(cin,line))coutlineendl;return0;}string对象的操作7intmain(){stringst(“Helloworld!\n”);cout“thesizeof”st“is“st.size()“characters,includingthenewline”endl;return0;}String::size_type类型8size操作返回的是string::size_type类型的值。任何存储string的size操作结果的变量必须为string::size_type类型。特别重要的是,不能把size的返回值赋给一个int变量。string::size_type的unsigned型。存储的string长度是int所能存储的两倍。有些机器上int变量的表示范围太小如在一个16位的int型机器上,int类变量最大只能表示32767个字符的string对象。而能容纳一个文件内容的string对象轻易就会超过这个数字。为了避免溢出,保存一个string对象size的最安全的方法是使用标准库类型:string::size_type.String关系操作符9==,!=,,=,,=关系操作符用于比较两个string值的大小。实际上是比较每个string对象的字符。String对象比较操作是区分大小写的,同一个字符的大小写形式被认为是两个不同的字符。:即任何一个大写字母都小于任意的小写字母。比较策略:如果两个string对象长度不同,且短的string对象与长的string对象的前面部分相匹配,则短的string对象小于长的string对象。如果两个string对象的字符不同,则比较第一个不匹配的字符。例:stringsubstr=“Hello”;stringphrase=“HelloWorld”;stringslang=“Hiya”;String对象的赋值10大多数库为型支持赋值操作。对于string对象可以把一个string对象赋给另一个。stringst1,st2=“theexpenseofspirit”;st1=st2;两个string对象相加11String对象的加法被定义为连接。Strings1(“hello,”);Strings2(“workd\n”)Strings3=s1+s2;//s3is:hello,workd\nS1+=s2;//s1=s1+s2;将string对象和字符串字面值混合连接可得同样结果。S1=s1+”world\n”;//s1=helloworld\n和字符串字面值的连接12Strings1=“hello”;Strings2=“world”;Strings3=s1+”,”;//okStrings4=“hello”+”,”;//error,nostringStrings5=s1+”,”+”world”;//okStrings6=“hello”+”,”+s2;//errorcannot//addstringliterals从string对象获取字符13String类型通过下标操作符[]来访问string对象中的单个字符。下标是一个size_type类型的值。常称为下标或索引。Stringstr(“somestring”);For(string::size_typeix=0;ix!=str.size();++ix)coutstr[ix]endl;下标操作可用作左值14和变量一样,string对象的下标操作返回值也是左值。因此,下标操作可以放于赋值操作符的左边或右边。For(string::size_typix=0;ix!=str.size();ix++)str[ix]=‘*’;定义索引变量时,最好用string::size_type型。String对象中字符的处理1516Strings(“HelloWorld!!!”);String::size_typepunct_cnt=0;//countnumberofpunctuationcharactinsFor(string::size_typeindex=0;index!=s.size();++index)if(ispunct(s[index]))++punct_cnt;Coutpunct_cnt“punctuationcharactersin”sendl;3.3标准库的vector类型17我们把vector称为容器。因为它可以包含其他对象。一个容器中所有对象都必须是同一种类型的。#includevectorusingstd::vector;vectorintivec;//ivecholdsintobjectsVectorSales_itemSales_vec;//holdsSales_items3.3.1vector对象的定义和初始化181.创建确定个数的元素vectorintivec1;//ivec1holdsintobjectvectorintivec2(ivec1);//ok,copyelemnts//ofivec1intoivec2vectorstringsvec(ivec1);//error,svec//hildsstirngnotints19可以用元素个数和元素值对vector以象进行初始化。vectorintivec4(10,-1);//10ele,each-1Vectorstringsvec(10,’hi’);//10stringvector对象(以及其他标准库容器对象)的重要属性在于可以在运行时高效地添加元素。定义时若没有指定元素的初始化式,标准库将自行提供一个元素初始值进行值初始化。Vectorintfvec(10);//10elements,eachis0Vectorstringsvec(10);//10elments,eachemp3.3.2vector对象的操作20Vectorint::size_type//okVector::size_type//error向vector中添加元素21//readwordsfromthestandardinputand//storethemaselementsinavectorStringword;Vectorstringtext;//emptyvectorWhile(cinword){text.push_back(word);//appendwordtotext}Vector的下标操作22Vector的下标操作符接受一个值,并返回vector中该对应位置的元素。Vector元素的位置从0开始。//resettheelementsinvectortozeroVectorint::size_typeFor(vectorint::size_typeix=0;ix!=ivec.size();++ix)Ivec[ix]=0;下标操作不添加元素23Vectorintivec;//emptyvectorFor(vectorint::size_typeix=0;ix!=10;++ix)ivec[ix]=ix;//disaster;ivechasnoelements正确写法:Vectorintivec;For(vectorint::size_typeix=0;ix!=10;++ix)ivec.push_back(ix);//ok,addsnewelementwithvalueix注意:必须是已存在的元素才能用下标操作符索引。通过下标操作符赋值时,不会添加任何元素。24警告:只能对确知已存在的元素进行下标操作Vectorintivec;//emptyvectorCoutivec[0];//error,ivechasnoelements!Vectorintivec2(10);//vectorwith10elementsCoutivec[10];//error,ivechasele0..93.4迭代器简介25迭代器是一种检查容器内元素并遍历元素的数据类型。标准库为每一种标准容器定义了一种迭代器类型。所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。Vectorint::iteratoriter;Begin和end操作26Vectorint::iteratoriter=ivec.begin();返回一个指向ivec[0]的迭代器。Vectorint::iteratoriter=ivec.end();返回一个迭代器,该迭代器指向ivec的末端元素后面的一个元素。Vector迭代器的自增和解引用运算27迭代器类型可使用解引用操作符(*)来访问迭代器所指向的元素。*ter=0;++iter指向下一个元素。由于end操作返回的迭代器不指向任何元素,因此不能对它进行解引用或自增操作。迭代器应用程序示例28Vectorintivec(10.9);//10个值为9的元素//resetalltheelementinivecto0For(vector

1 / 42
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功