C++ primer分章节快速回顾

第三章:

1,sozeof(int); int n_int=INT_MAX; sizeof n_int;(对变量括号可选)
2,#include<climits>包含一些类型的最大值
3,count 默认显示十进制, cout<<dec(默认) count<<hex count<<oct
4,bool, char, short, int, long, longlong, float, double, long double
5,count.setf(ios_base::fixed,ios_base::floatfield)//防止大的数切换到E表示法,显示小数点后6位小数(保留0)
6,C++风格 typeName(value)
7,变量初始化 int wren(23); int wren=23;
8,C++ const和#define区别:
(1)const 编译阶段使用,define是在预处理阶段展开;
(2)const可以指定类型,做安全检查,而define没有
(3)const可以在限定在指定区域
(4)const用于更复杂的类型,数组,结构体(大对象要分配内存,或extern声明或对其取地址时也要分配内存)
(5)const常量定义基本类型时放在符号表中(堆或栈),而define仅仅是展开,不分配内存
9常量的类型:L,l; U,u; ul,UL;

10 类型转换 float运算不提升为double,int型整数被赋给float时截取小数

***常量折叠:#define和const,const定义常量,你不能尝试通过更改变量的值去改变它,但是可以通过引用它的地址来改变,即通过指针。常量折叠说的是,在编译阶段,对该变量进行值替换,同时,该常量记录在符号表中,和define还不一样,有三种情况下,会为const分配内存。
实例:#include<iostream>
int main()
{
using namespace std;
const int i=20;
int *p=(int *) &i;//改变i内存地址上的值
*p=10;

cout<<(int *)&i<<":"<<i<<endl;//这个i在编译阶段已经被20给替换了
cout<<p<<":"<<*p<<endl;
return 0;
}
结果显示0012FF44:20
0012FF44:10

第四章:
1,数组只能定义时初始化,int hand[500]={0},此后只能单个单个元素赋值; 不能数组间赋值
初始化数组为{1}时,只有第一个元素是1,其它置0
a=int[10];sizeof a 数组字节数10*4; sizeof a[0] int类型字节数4

2,字符串数组 char cat[5]="C+owby"或 char cat[]="....."; count<<cat打印字符串,而非地址;

3,字符串输入:cin通过空白(space,\b,\n)来定界,不能读空格;
cin.getline(name,20),遇到\r,\n停止,丢弃换行符,最多读19个char;
cin.get(name,20).get()或name=cin.get();cin.get();cin.clear()
* 用cin>> 连续读入时,注意每次读入字符或数字时,cin,get()或者(cin>>value).get()处理掉字符流中的回车生成的\n

4,读数字 cin>>year;cin.get()处理空行,防止阻断输入

5,#include<string> string类在名称空间std中 使用前必须声明useing namespace std;
和字符串数组不同,相互赋值:str1=str2; 拼接:str1+=str2;读入:getline(cin,str1)(这是个函数,不是cin的类方法)

6,对比#include<cstring>,
void strcat(char *t,char *s){ while(*t++=*s++);}字符串拼接
strcpy(char *t,char *s);

字符串长度:string类方法 len=str1.size()(不计‘\0‘), 字符串数组 len=strlen(charr1)(cstring 中的函数,不计\0)
读入方法: 字符串数组 cin.getline(name,20), string:getline(cin,str1);

7,struct 可以相互赋值, 成员分隔定义时用;赋值时用,可以整体赋值,可以结构数组

8, union, enum spectum{oen,two=0,three=8,four};spectum myflag=one;

9,指针:使用前一定要有指向地址!cha c=‘a‘,*p=&c; (int*)强制转换为两个字节的地址类型,(double*)四个字节
10,new/delete 和malloc/free比较:
new/delete是操作符,而malloc/free是库函数,都是用于申请动态内存和释放动态内存的
  对非内部数据类型的对象而言,malloc/free不能执行构造函数和析构函数,注定只能用于C
  而new/delete可以胜任
11,new/delete条例:内存耗尽返回0(null pointer)可以被释放;不是new开辟的内存就不要用delete去释放;一个地址只能  释放一次,无论多少指针指向它
12,指针和数组名:基本相同,根本区别:数组名是指向第一个元素的地址常量,不能被赋值!
  指针或数组名加1是指向下一个地址块,即下个元素
13,cout的智能化:cout<<array;array是数组名,cout自动辨别是否为字符串数组(试了下,char数组就可以,比如字符数组char array[]=[‘a‘,‘b‘,‘ ‘,‘c‘]也可以)或string或char*,若是打印数组内容;其它则打印数组首元素地址

 1 #include<iostream>
 2 #include<cstring>
 3 #include<string>
 4
 5 using namespace std;
 6 int main()
 7 {
 8     string str1="hello";
 9     cout<<str1;//打印字符串内容
10     char array[]="hello word";
11
12     cout<<endl<<array<<endl;//打印字符串数组内容
13     int mm[6]={0,1,2,3,4,5};
14     cout<<mm<<endl;//打印整型数组地址
15
16     char c=‘a‘,nn[]={‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘};
17     cout<<"nn is:"<<nn<<endl;//打印字符型数组内容,但是由于n[4]后面的没有初始化,乱码
18     char *p1=new char[strlen(nn)+1];
19     cout<<"strlen:"<<strlen(nn)<<endl;//strlen只是针对字符串数组有用!!12是怎么来的?
20     strcpy(p1,nn);
21     cout<<p1<<endl;//同打印nn一样,后面未初始化的依然乱码
22     cout<<*p1<<endl;//首个元素内容
23
24     char vv[20]="hello word!!!";
25     cout<<vv<<endl;
26     cout<<"strlen:"<<strlen(vv)<<endl;
27     char *p2=new char[strlen(vv)+1];//这次可以了 13
28     strcpy(p2,vv);
29     cout<<p2<<endl;//打印出hello word
30     delete [] p1;
31     delete [] p2;
32     return 0;
33
34 }

  

时间: 2024-12-28 12:24:24

C++ primer分章节快速回顾的相关文章

数据结构快速回顾——二叉树

二叉树(Binary Tree)是个有限元素的集合,该集合或者为空.或者由一个称为根(root)的元素及两个不相交的.被分别称为左子树和右子树的二叉树组成.当集合为空时,称该二叉树为空二叉树.在二叉树中,一个元素也称作一个结点. 基本概念: (1)结点的度.结点所拥有的子树的个数称为该结点的度. (2)叶结点.度为0的结点称为叶结点,或者称为终端结点. (3)分枝结点.度不为0的结点称为分支结点,或者称为非终端结点.一棵树的结点除叶结点外,其余的都是分支结点. (4)左孩子.右孩子.双亲.树中一

算法快速回顾——排序算法

常用排序算法有以下几种:冒泡排序.插入排序.快速排序.归并排序.堆排序. 本文将对五种常用算法分析并实现. //交换两个元素的值 这里列出几种不同写法 void swap(int *a, int *b) { int c = *a; *a = *b; *b = c; } void swap(int *a,int *b) { *a = (*a)^(*b); *b = (*b)^(*a); *a = (*a)^(*b); } void swap(int *a,int *b) { *a = *a + *

数据结构快速回顾——图的遍历

图的遍历指的是从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次.图的遍历操作和树的遍历操作功能相似.图的遍历是图的一种基本操作,图的许多其它操作都是建立在遍历操作的基础之上. 图的遍历方法目前有深度优先搜索法和广度(宽度)优先搜索法两种算法. 深度优先搜索法DFS 深度优先搜索法的基本思想是:从图G的某个顶点v0出发,访问v0,然后选择一个与v0相邻且没被访问过的顶点vi访问,再从vi出发选择一个与vi相邻且未被访问的顶点vj进行访问,依次继续.如果当前被访问过的顶点的所有邻接顶点都已

数据结构快速回顾——栈

堆栈,也可直接称栈,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端进行加入资料和输出资料的运算.另外堆栈也可以用一维阵列或连结串行的形式来完成. 1 #define STACK_INIT_SIZE 100 2 #define STACKINCREMENT 10 3 4 typedef struct 5 { int* top; 6 int* base; 7 int stacksize; 8 }SqStack; 9 10 int InitStack(SqStack &

数据结构快速回顾——二叉树 解幂子集问题

回溯法是设计递归的一种常用方法,它的求解过程实质上就是一个先序遍历一棵"状态树"的过程,只是这棵树不是遍历前预先建立的而是隐含在遍历过程中的. 下面举一个例子:求含n个元素的集的幂集:集合A={ {1,2,3}, {1,2}, {1,3}, {1}, {2,3},{2},{3},{}}; //{}表示空集合从集合A的每一个元素的角度看,它只有两种状态:或者是属于幂集的元素集,或不属于幂集元素集,则求幂集的过程就可以看成是依次对集合A中的元素进行"取","舍

数据结构快速回顾——平衡二叉树 AVL (转)

平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树.1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树.平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态.这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(

数据结构快速回顾——二叉查找树

二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 任意节点的左.右子树也分别为二叉查找树. 没有键值相等的节点(no duplicate nodes). 二叉查找树相比于其他数据结构的优势在于查找.插入的时间复

Netty源码分析第4章(pipeline)----&gt;第7节: 前章节内容回顾

Netty源码分析第四章: pipeline 第七节: 前章节内容回顾 我们在第一章和第三章中, 遗留了很多有关事件传输的相关逻辑, 这里带大家一一回顾 首先看两个问题: 1.在客户端接入的时候, NioMessageUnsafe的read方法中pipeline.fireChannelRead(readBuf.get(i))为什么会调用到ServerBootstrap的内部类ServerBootstrapAcceptor中的channelRead()方法 2.客户端handler是什么时候被添加

iOS - 小说阅读器分章节,支持正则分章节和按字数分章节

最近做了一个WIFI传书本地阅读功能,有所收获在这里记录下吧. 用户下载的书籍分为两种,一种是有章节格式的,比如 第一章,001章.等,这种可以用正则来直接分章节,还有绝大多数书籍是没有这种格式的,这种如果整本书来直接解析的话,对CPU要求比较大,可能会卡死闪退,所有手动分章节还是很有必要的,这种情况下我们采用按照两千字来分. 话不多说,开始吧. 1.WIFI传书把书传到APP沙盒里,这里我们采用的是 GCDWebServer ,很方便,这里就不做陈述了. 2.将沙盒里面的 .txt 文件转成