C++笔记.docx
- 文档编号:24675105
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:73
- 大小:145.38KB
C++笔记.docx
《C++笔记.docx》由会员分享,可在线阅读,更多相关《C++笔记.docx(73页珍藏版)》请在冰豆网上搜索。
C++笔记
C语言基础
第一章:
C/C++语言概论与结构
1.1:
预处理语句:
#include
#include“……”编译器从用户的工作路径开始搜索
#include
1.2:
计算机3种编码:
1:
原码二进制
2:
反码二制码0,1互换
3:
补码计算机存储数据都是以补码形式存储的
正数补码:
此正数的原码
负数补码:
负数绝对值的反码+1
1.3:
C++输出格式
#include
usingnamespacestd;//导入std命名空间
std:
:
cout<<“xuchong”< : endl;未导入std命名空间 cout<<“xuchong”< iostream类的对象及作用: cout: 将数据显示在标准输出设备上. cerr: 它无缓冲地向标准错误输出设备输出数据. clog: 类似cerr,但是它使用缓冲输出. cin: 用于从标准输入设备读取数据 char*str=NULL; cout<<“请输入一个字符串: ”; cin>>str; 第二章: 数据类型、运算符、表达式 2.1数据类型 数据类型 取值范围 长度 输出 基本数据 字符类型 char -128~127 1 布尔默认1/0输出 true/false样式输出需转格式: cout< 八进制输出: cout< 十进制输出: cout< 十六进制输出: cout< unsignedchar 0~255 1 整型 short -32768~32767 2 int 2*10-32~2*1032 4 long 2*10-31~2*1031-1 4 实型 float 3.4*10-38~2*1032 4 double 8 布尔型 bool true/false 1 枚举 emun emuns{a=1,b}; 4 引用类型 指针 int*a; 4 引用 int&a; 数组 inta[5]; 计算字节数运算符: sizeof(4)=4; sizeof(int)=4; 复合类型 结构 structa{inta;intb;}; 联合 unionX{a=1,b,c}; 类 classStu{}; 字符串类型 string strings=”xu”; 空值 void 基本类型的最大最小值: #include cout< : max()int型最大值 cout< : min()int型最小值 2.2引用 引用可以用作对象的另一个名字,通过引用我们可以间接地操纵对象使用方式类似于指针,在实际的程序中引用主要被用作函数的形式参数——通常将类对象传递给一个函数,将不会产生对象的副本,直接使用对象的引用。 Ø引用声明时必须初始化,一旦引用定义,就不能再指向其他对象 Øconst引用可以用不同类型的对象初始化,只要能类型转换也可是不可寻址的值。 Ø引用在内部存放的是一个对象的地址,是该对象的别名。 inta=5; int&r_a=a; int*&p_a=&a;//指向int指针的引用 int&max(int&a,int*&p){}//返回值与参数为引用类型的函数 2.3: 类型转换 强制类型转换: static_cast inta=(int)3.14//C类型强转 intb=int(3.14)//C++支持的类型强转 2.4: 位运算符 &: 按位与都为1才为1 |: 按位与有一为1即为1 ^: 按位异或都1为0,有0为1 ~: 按位取反数值反码-1~2=-3 >>: 按位右移257/8==257>>3456%32==456-(456>>4<<4) <<: 按位左移5<<2=5*22 inta=1000; a|=0x1<<3;//改变第三位值为1 a&=~(0x1<<3);//改变第三位值为0 2.5: 逗号运算符 intI=(1,2,3);由左到右执行 i=3; 2.6: 数组类型 一数组: inta[4]={1,2,3};未赋值部分默认为0 inta[]={1,2,3};有多少数值即为数组长度,越界为随机数 二维数组: inta[][2]={1,2,3,4};行下标可省略,数值个数/列下标即行下标 inta[2][3]={{1,2},{3,4}};无完整赋值,默认值0 字符数组 1: 逐个赋值 chara[10]={‘h’,’e’,’l’,’l’,’o’}; 2: 字符串赋值 chara[10]=“…”;此方法节省空间,但会多出一个一长度‘\0’; Scanf(“%s”,a) 说明: %s表示数组里所有值,a表示数组首地址,等同于a[0],&a Scanf(“c”,&a[0]) 说明: %c表示数组a中某一个的值,需要&来标示为数组中某个值的地址 第三章: 关键字 1.extern extern: 修饰的函数或全局变量可以当前使用,仅仅是一个声明,并未定义、分配内存空间。 在所有模块中作为一种全局变量只能被定义一次。 常使用形式: Ø在C++中引用C文件 C头文件中变量与函数声明: externinta(); C++调用C文件: extern“C”{#include“C头文件”}//先导头文件,在调用 Ø在C文件中引用C++文件 C++变量、函数声明: extern“C”inta(); C文件调用: externinta();//先声明,在调用 2.static Ø在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 Ø在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。 它是一个本地的全局变量。 被限制在声明它的模块的本地范围内使用。 Ø对于类的static成员变属于整个类所有,对类的所有对象只有一份拷贝。 Ø在类中的static成员函数属于整个类所有,此函数不接收this指针只能访问类的static成员变量。 3.const const代表不可变的、只读的。 不可变只相对于程序而言, Øconstinta常量整型 Øconstint*a指向常整型的指针,整型数不可修改,但指针可以 Øint*consta指向整型的常指针,指针指向的整型数可修改,指针不能 Øconstint*consta指向常整型的常量指针 作用: >防止一个变量被改变,const变量需在声明时初始化。 4.volatile volatile修饰的变量表示变量可能会被意想不到的改变,这样优化器在用到这个变量时必须重新读取该变量值,而不是使用保存在寄存器里的备份。 Ø并行设备的硬件寄存器 Ø中断服务子程序中会访问到的非自动变量 Ø多线程中被几个任务共享的变量 intfun(volatileinta) returna*a//值会意想不到的改变,得到的可能不是想要值 //应先用变量保存数据在运算 5.typedef typedef用于为数据类型取别名,它与#define宏定义不同,typedef会进行类型检查。 宏定义只是简单的字符替换。 #defineCHchar* #defienfun(a)a*a; Typedefchar*PCH; CHa,b==char*a,b;//b为char型变量 PCHa,b==char*a,char*b; fun(a+b)==a*a+a*a; 6.register 寄存器变量存放在CPU的寄存器中,使用时不需要访问内存,直接从寄存器中读写,提高执行效率。 对于变量频繁读写时,反复访问内存时可使用。 Ø只有局部自动变量和形参才可定义为寄存器变量。 属于动态存储方式。 Øregister是一个建议型关键字,指程序建议放在寄存器中,但最终由系统决定是否为寄存器变量。 与inline同理。 intmain() { registerinti=0; registerints=0; for(i;i<=100;i++) { s+=i; } return0; } 第三章: 标准库类型 3.1命名空间的using 1.命名空间的作用 命名空间主要用于解决程序中的命名冲突,通过在不同的作用域使相同的标识符互不冲突。 2.命名空间的定义 namespace标识符 { //名字空间的函数...... }; 3.名字空间函数的定义 函数返回值空间名: : 函数名(参数列表) { //方法体 } 4.名字空间的使用 Ø把名字空间所有的名字都变成可用的; usingnamespacestd; cout<<“****”; std: : cout<<“****”; Ø使用声明把一个名字空间的某个名字变成可用的 usingstd: : cout; cout<<“****”; 5.名字空间别名 namespacenewStd=std; newStd: : cout<<“****”; 3.2标准库string类型 string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及各种函数操作。 #include #include usingstd: : string 1.string对象的定义和初始化 strings;//生成一个空字符串s strings=“xu”;//拷贝构造函数,将xu赋值给s strings(str)//拷贝构造函数,生成str的副本 strings(str,index)//将字符串str第index个字符以后赋给s strings(str,index,len)//将字符串str第index个字符后len个长度赋给s strings(cstr)//将C字符串赋给s strings(chars,len)//将C字符串前len个字符赋给s strings(num,c)//将num个c字符赋给s 2.string对象的读写 A.从标准输入读取string,并存储在字符串中: strings; cin>>s; 注: 忽略开头所有的空白字符读取字符直到再次遇到空白字符,读取终止。 B.用getline函数读取整行文本: strings; getline(cin,s);//将从标准输入读取的字符串存储在s中 注: 不忽略行开头的空白字符getline不接收换行符 3.string对象的操作 ♣字符串可以相互+(连接),=(替换),+=(追加),>,<,==,! =比较 ♣字符串拼接 stringstr=“hello”; strings=“xuchong”+str;//操作符重载,必须有一操作数为类对象 ♣可通过下标访问单个字符s[i] ♣下标操作可用作左值 s[5]=‘*’; ♣可计算下标值 s[a*b]=‘*’; 4.string对象中字符的处理 #include isalnum(c) 字母/数字true isalpha(c) 字母true isdigit(c) 数字true iscntrl(c) 控制字符true isgraph(c) 不是空格,但可打印true islower(c) 小写字母true isupper(c) 大写字母true tolower(c) 大写转小写,若c为小写返回c toupper(c) 小写转大写,若c为大写返回c isxdigit(c) 十六进制true 3.1标准库vector类模板 vector是同一种类型的对象的集合。 每个对象都有一个对应的索引值。 与数组类似,但在运行时可动态改变大小,从而存放任意数量的元素。 vector对象可以在序列末尾快速插入、删除新元素,但在序列中其它位置插入或删除时效率低。 2.vector对象的定义和初始化 vector vector vector vector vector 3.vector对象的操作 函数 说明 assign(first,last) 用迭代器first和last所辖范围内元素替换向量元素 assign(num,val) 用val的num个副本替换向量元素 at(n) 返回向量第n个位置元素值 back() 返回对向量末尾元素的引用 begin() 返回指向向量中第一个元素的迭代器 capacity() 返回当前向量最多可以容纳的元素个数 clear() 删除向量中反有元素 empty() 如果向量为空,返回true end() 返回指向向量中最后一个元素的迭代器 erase(start,end) 删除迭代器start和end所辖范围内的向量元素 erase(i) 删除迭代器i指向的特别是元素 front() 返回对向量起始元素的引用 insert(i,x) 把值X插入向量中迭代器i指明的位置 insert(i,start,end) 把迭代器start和end所辖范围内的元素插到向量迭代器i位置 max_size() 返回向量的最大容量 pop_back() 删除得是最后一个元素 push_back(x) 把值x放在向量末尾 rbegin() 返回一个反向迭代器,指向向量末尾元素之后 rend() 返回一个反向迭代器,指向向量起始元素 reverse() 颠倒元素的顺序 resize(n,x) 重新设置向量大小n,新元素的值初始化为x size() 返回向量的大小 swap(vector) 交换两个向量的内容 #include usingnamespacestd; int_tmain(intargc,_TCHAR*argv[]) { vector vector : iteratorit; //向量赋值 for(inti=0;i<5;i++) { vec.push_back(i);//向集合末尾加入数据 } vector : iteratorit=vec.begin();//设置插入/删除的起始位置 vec.insert(it,2,2);//添加2个数据到向量头位置 intsize=(int)aa.size();//获取元素个数 for(inti=0;i { vector : iteratorx=aa.begin(); aa.erase(x);//删除开头的元素 aa.pop_back();//删除最后一个元素 } for(it=vec.begin();it! =vec.end();it++)//打印 { cout<<*it< } return0; } 4.vector对象比较 逐个比较元素值,有一为大即为大 若元素个数与所有元素值均相同,两向量相等 3.2泛型算法 1.查找迭代器中指定对象是否存在 头文件 #include 函数原型 iteratorfind(iteratorbeg,iteratorend,constval) beg 开始查找位置迭代器 end 结束查找位置迭代器 val 要查找的对象 返回值 成功: 指向查找元素的迭代器 出错: end迭代器 2.查找元素在输入序列中出现次数 头文件 #include 函数原型 intcount(iteratorbeg,iteratorend,constval) beg 开始查找位置迭代器 ends 结束查找位置迭代器 val 要查找的元素 返回值 成功: 返回统计数 出错: 0 3.排序 头文件 #include 函数原型 voidsort(iteratorbeg,iteratorend) beg 开始查找位置迭代器 ends 结束查找位置迭代器 返回值 成功: 返回统计数 出错: 0 4.排重 头文件 #include 函数原型 iteratorunique(iteratorbeg,iteratorend) beg 开始查找位置迭代器 ends 结束查找位置迭代器 返回值 成功: 排除重复的迭代器 出错: end迭代器 第三章: 函数 3.1非引用形参 普通非引用类型的参数通过用实参副本初始化形参,函数并没有访问实参本身。 不会修改实参的值。 1.指针形参 指针作为形参,实参与形参指向同一内存空间,当形参修改内存空间的内容时,实参才会改变,当形参修改内存指向时,函数结束栈内存释放空间,实参不会改变, 当实参为const指针类型,形参只可以为const指针类型。 当实参为普通指针类型。 形参可以为const指针, voidpt(int*p){} voidmain() { constint*p=NULL; int*s=NULL; pt(p);//error,形参为普通指针,可修改实参值,但实参不允许修改 pt(s);//ok } 2.const形参 除了指针类型,若形参是非引用非const形参,则实参即可是const实参也可是非const的实参。 反之亦然。 非引用const形参在函数中,不可以改变实参的局部副本,由于实参仍然是以副本的形式传递,因此传递给函数的即可是const对象也可是非const对象。 在C语言中具有基本类型的const形参或非const形参的函数并无区别,C++继承此特性。 voidpt(intp){} voidmain() { constintp=0; ints=0; pt(p);//ok pt(s);//ok } 3.复制实参的局限性 ♣当需要在函数中修改实参的值时 ♣当需要以大型对象作为实参传递时,复制实参会消耗很多的时间和存储空间 ♣当没有办法实现对象的复制时 3.2引用形参 引用形参直接关联到其所绑定的对象,不生成实参的副本。 定义引用时必须用与该引用绑定的对象初始化该引用。 当形参为引用形参,不允许传递值做实参,实参与形参类型必须一致,不能进行类型转换。 inttest(int&a) { return++a; } voidmain() { shorta=1; intb=1; test(a);//error类型不符, test (1);//error实参为右值。 test(b);//ok } 1.使用引用形参返回额外信息 可以利用引用形参即返回一个迭代器又返回当前迭代器指向对象。 等操作,可以使用程序员获得额外返回信息。 2.利用const引用避免复制 当实参为大对象时,复制实参会消耗大量的时间以及存储空间,可利用const引用不复制实参,直接操作实参,提高执行效率。 应该将不需要修改的引用形参定义为const引用,普通非const引用形参有很多局限性。 这样的形参不能用字面值或产生右值的表达式实参初始化。 booltest(string&str1,string&str2)//string对象可能很长, { returnstr1>str2; } 3.1vector和其他容器类型的形参 函数不应该有vector或其他容器容器类型的形参。 调用含有普通的非引用vector形参的函数将会复制vector的每一个元素。 通常通过传递指向容器中需要处理的元素的迭代器来传递容器。 voidtest(vector : iteratorit) { cout<<*it< } voidmain() { vector vector : iteratorit; for(inti=0;i<5;i++) { vec.push_back(i);//向集合末尾加入数据 } for(it=vec.begin();it! =vec.end();it++) { if(*it==3)//找到指向容器对象值为的迭代器 break; } test(it);//将迭代器作实参传递给函数。 避免了传递整个容器 } 3.2数组引用形参 若形参为数组的引用。 编译器不会将数组实参转化为同类型的指针,而是传递数组的引用本身。 数组大小成为成为形参的一部分,编译器会检查数组实参的大小与形参的大小是否匹配。 voidtest(int(&x)[5]) { for(inti=0;i<5;i++) { x[i]+=10;//修改数组引用形参值,实参相应修改 } } voidmain() { inta[5]={0,1,2,3,4}; test(a); for(inti=0;i<5;i++) { cout< } } 第四章: 指针 1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)