C++Primer

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

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

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

资源描述

C++Primer学习总结C++程序#include是预处理器指示符,它能使iostream的内容读入我们的文本文件中。在C++标准库中定义的名字,如cout,不能在程序中直接使用,需要添加#includeiostreamusingnamespacestd;//被称为using指示符C++标准库中的名字都是在一个称作std的名字空间中声明的,这些名字在我们的程序文本文件中是不可见的,除非我们显式地使它们可见。using指示符告诉编译器要使用在名字空间std中声明的名字。内置数组数据类型内置数组类型不支持数组之间的赋值。因为数组名代表常量指针,要想完成赋值,需要使用for循环,按顺序拷贝每一个元素。动态内存分配静态与动态内存分配的两个区别是:1、静态对象是有名字的变量,我们直接对其进行操作。动态对象是没有名字的变量,我们通过指针间接对它进行操作;2、静态对象的分配与释放由编译器自动处理。动态对象的分配与释放必须由程序员显式地管理,用new和delete两个表达式来完成。eg:int*pint=newint(1024);deletepint;int*pia=newint[4];delete[]pia;pint与pia的不同:1、pia拥有四元素数组的第一个元素的地址,而pint只是简单地包含单一对象的地址;2、pint的初值为1024,pia则无法显式地为数组的每个元素动态分配初始值。文字常量C++预定义了一组数值数据类型,用来表示整数、浮点数和单个字符,及字符串的字符数组。文字常量是不可寻址的。转义序列:换行符\n水平制表键\t退格键\b垂直制表键\v回车键\r进纸键\f响铃符\a反斜杠键\\问号\?单引号\’双引号\”L’a’------宽字符文字,类型为wchat_t,用来支持汉/日语‘a’------单一字符“a”------包含字符a和null字符串需在第一行最后加上一个倒斜线,才能延续到第二行。eg:“multipleline\comment”变量左值表示变量的地址右值表示变量的值全局变量会被初始化为0局部变量其初始值可能是任意值前提是未被赋值(int型)左值与右值变量解释以下两组students和name语句的差别:指针类型*解引用操作符int*(*ptr)[4]其中指针类型为:int*(*)[4]指针所指向的类型为:int*()[4]指针的值/指针所指向的内存区或地址:指针本身所占据的内存区:sizeof(int)=4字符串类型#includeCStringintstrlen(constchar*);//返回字符串长度intstrcmp(constchar*,constchar*);//比较两个字符串是否相等char*strcpy(char*,constchar*);//把字符串2拷贝到字符串1Const限定修饰符常量对象必须有初值constintbufsize=512;//只读,程序中不能修改constdoubleminWage=9.60;double*ptr=&minWage;//ERRORconstdouble*pc=0;constdoubleminWage=9.60;pc=&minWage;//OKdoubledval=3.14;pc=&dval;//ERRORdval=3.14159;*pc=3.14159;//ERROR试图将一个非const对象的指针指向一个常量对象编译出错,因为在运行程序的任意一点上,编译器不能确定指针所指的实际对象1231与2const对象的指针地址只能赋值给指向const对象的指针2与3指向const对象的指针可以被赋值以一个非const对象的地址。其中语法正确,但编译错误Const限定修饰符constdouble*cptr;cptr是一个指向double类型的,被定义成const的对象的指针。我们可以重新赋值cptr,使其指向不同的对象,但不能修改cptr指向的对象。int*constCurErr;指向一个非const(int型)对象的const指针,我们不能赋给CurErr其他的地址值,但可以修改其指向的值。在实际程序中,指向const的指针常被用作函数的形式参数,被传递给函数的实际对象在函数中不会被修改。引用类型引用必须被初始化一旦引用已经定义,它就不能再指向其他的对象。intival=1024;int&refval=ival;//refval是一个指向ival的引用int&refval=&ival;//ERRORrefval是int型,而不是int*型int*pi=&ival;//OKint*&refval2=pi;//refval2是一个指向指针的引用引用类型指针和引用的区别:引用必须总是指向一个对象若一个引用给另一个引用赋值,改变的是被引用的对象,而不是引用本身。eg:int&ri=ival,&ri2=ival2;ri=ri2;改变的是ival,而不是引用本身,赋值后,两个引用仍指向原来的对象。int&rvall=1.01;//ERROR无效,能够储存文字常量者必须是一个const引用。constint&rvall=1.01//OK枚举类型、数组类型枚举类型关键字enum枚举提供了一种替代的方法,它不但定义了整数常量,而且还把它们组合成一个集合。在缺省情况下,第一个枚举成员被赋以值0,后面的每个枚举成员依次比前面的大1。数组类型数组定义由类型名、标识符、维数组成,维数必须是常量表达式(即必须能在编译时刻计算出它的值)C++不允许声明一个引用数组。int&iar[]={ix,jx,kx};//ERROR不允许引用数组intia[4*7-14];//OKintia[2*7-14];//ERROR不能分配大小为0的数组vector容器类型#includevectorvector类为内置数组提供了一种替代表示.vectorintivec(10);//相似于intia[10];ivec.empty()//测试其是否为空ivec.size()//查询其大小vectorintivec(10,-1);//定义了ivec,它包含10个int型的元素,每个元素被初始化为-1intia[6]={3,2,5,1,2,0};//显式地把数组元素初始化为一组常量vectorintivec(ia,ia+6);//vector的初始化只能为一个已有的数组的全部或一部分vectorintivec(&ia[2],&ia[5]);//拷贝3个元素,即(ia[2],ia[3],ia[4])vector可被另一个vector初始化,或赋值给另一个vectorvectorstringsvec;vectorstringuser_names(svec);//用另一个vector初始化svec=user_names;//赋值vector容器类型在定义vector时,不是定义一个已知大小的vector,而是定义一个空vector,我们向vector中插入元素,而不再是索引元素,以及向元素赋值。vectorstringtext;stringword;while(cinword){text.push_back(word);}vectorstring::iteratorit=text.begin();iterator(迭代器)是标准库中的类,具有指针的功能complex复数类型#includecomplex复数包含实部和虚部(虚部代表负数的平方根)eg:2+3i复数对象有float、double、longdouble几种表示,还可以声明复数对象的数组、指针、引用eg:complexdoublepurei(0,7);//纯虚数0+7icomplexdoublereal_num(3);//虚数缺省为0,3+0icomplexlongdoublezero;//实部和虚部均缺省为0complexdoublepurei2(purei);//用另一个复数对象来初始化complexdoubleconjugate[2]={complexdouble(2,3),complexdouble(2,-3)};//数组complexdouble*ptr=conjugate[0];//指针complexdouble&ref=*ptr;//引用complex复数类型complexdoublecomplex_obj;doubledval=3.14159;complex_obj=dval;//OKdoubledval=complex_obj;//ERROR复数分实部和虚部,不能直接赋值。doublere=complex_obj.real();//real(complex_obj)doubleim=complex_obj.imag();//imag(complex_obj)typedef名字typedef机制为我们提供了一种通用的类型定义设施,可以用来为内置的或用户定义的数据类型引入助记符号。typedefdoublewages;typedefchar*cstring;externconstcstringcstr;//其中cstr的类型是?constchar*cstrERRORchar*constcstrOKvolatile限定修饰符volatile当一个对象的值可能会在编译器的控制或监测之外被改变时,例如一个被系统时钟更新的变量,那么该对象应该声明成volatile。因此,编译器执行的某些例行优化行为不能应用在已指定的volatile的对象上。volatile限定修饰符的用法同const非常相似——都是作为类型的附加修饰符。volatile修饰符的主要目的是提示编译器,该对象的值可能在编译器未监测到的情况下被改变。因此编译器不能武断地对引用这些对象的代码作优化处理。pair类型#includeutility可使得我们在单个对象内部把相同类型或不同类型的两个值关联起来。eg:pairstring,stringauthor(“James”,”Joyce”);//创建一个pair对象author,它包含两个字符串。并可以使用成员访问符号访问pair中的单个元素(author.first、author.second)typedefpairstring,stringauthor;authorpro(“May”,”Lily”);authorjoye(“James”,”Joyce”);coutpro.firstjoye.secondendl;Deques、Lists、vectorDeques双端队列#includedequepush_front()在群集前端安插元素push_end()在群集后端安插元素List双向链表#includelistfront()返回第一个元素pop_front()删除第一个元素vector#includevectorpush_back()在其后端安插元素容量(capacity())表示能被加入的元素总数长度(size())表示当前拥有元素的个数deque支持高效地在其首部插入和删除元素list在任意位置插入和删除元素的效率都很高vector随机访问效率高,因为每次访问离其起始位置的位移都是固定的vector怎样自己增长int_tmain(intargc,_TCHAR*argv[]){vectorintivec;coutivec:size:ivec.size()capacity:ivec.capacity()endl;for(intix=0;ix24;++ix){ivec.push_back(ix);coutivec:size:ivec.size()capacity:ivec.capacity()endl;}return0;}vector怎样自己增长int_tmain(intargc,_TCHAR*argv[]){vectorintivec;cout

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

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

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

×
保存成功