赞
踩
1.判断字符是否为十进制
// 判断是否为十进制
isdigit('a')
//实质上可以转为
if(ch<=57&&ch>=48)
2.对字符串进行限额输出
//限定数目为maxCount
char * result=new char[maxCount];
return string(result,maxCount);
3.字符串复制给字符数组,考虑长度的问题
//声明一个长度为10的字符数组,并拷贝
char result[10];
//即将报错,因为字符串最后还有一个'\0',实际长度11
strcpy(result,"0123456789");
4.字符串与指针相同与否
///字符数组
char result1[]="hello";
char result2[]="hello";
const char result3[]="hello";
const char result4[]="hello";
//结果为false,因地址不同
return (result1==result2);
//结果为false,因地址不同
return (result3==result4);
///指针//
char* result3="hello";
char* result4="hello";
//结果为true,因指针所指的内存块在堆里是相同的
return (result1==result2);
5.往链表末尾添加一个节点
在C++中创建指针时,计算机将分配用来储存地址的内存,但不会分配用来存储指针所指向的数据的内存。
//往链表末尾添加指针
void AddTail(ListNode** pHead,int value){
ListNode* pNew=new ListNode();
pNew->val=value;
pNew->next=nullptr;
if(pHead==nullptr){
//之所以pHead为指针的指针,表示为倘若pHead为空链表时,
//直接赋予头指针,否则出了这个函数pHead仍然为空指针
*pHead=pNew;
}
……
}
6.二叉树三个遍历
前序遍历: 根 左 右
中序遍历: 左 根 右
后序遍历: 左 右 根
7.C++数组大小的初始化问题
//C++不允许初始化数组大小是一个变量,即:
cin>>index;
int results[index];//报错
int *results=new int[index];//正确
8.栈
//栈结构是后进先出,相当于砖头放进罐子
statck<int> statcks;
stacks.push(1);//输入
stacks.pop();//把最上面的pop出来
int value=stacks.top();//获得栈里最上面的值
bool value=stacks.empty();//
9.回溯法
有n个球,放进排好号的n个篮子,每个篮子都可以容纳0个或者无穷个球,列出所有的排序,用一个多维向量(1*n的矩阵)进行表示。
思路,使用递归的话,参数为:结果向量集合,剩余球数,当前向量,当前索引,(必要时,Const向量维度的上限)。
//栈结构是后进先出,相当于砖头放进罐子
statck<int> statcks;
stacks.push(1);//输入
stacks.pop();//把最上面的pop出来
int value=stacks.top();//获得栈里最上面的值
bool value=stacks.empty();//
10.几种排序方法
11.C++里对字符串进行空格分割
string a="hello world";
stringstream inputs(a);
vector<string> results;
string temp;
while(inputs>>temp)
results.push_back(temp);
12.C++里对字符串反转
string s = "hello";
reverse(s.begin(),s.end());
13.C++里字节长度与32,64位系统关系
type | 32 | 64 |
---|---|---|
char | 1 | 1 |
unsigned char | 1 | 1 |
short | 2 | 2 |
int | 4 | 4 |
long | 4 | 8 |
long long int | 8 | 8 |
float | 4 | 4 |
double | 8 | 8 |
long double | 8 | 16 |
Pointer | 4 | 8 |
PS:最后Pointer指的是所有类型的指针
14.C++ STL
6大块,容器,算法,迭代器,函数对象,适配器,内存分配器
容器用来管理对象的集合
算法用来管理容器的操作
后面4个为前面两个服务的:
迭代器用来遍历对象集合的元素
15.C++ 多线程,并发,并行
多线程有两种,基于进程和基于线程
并发:同一时间段内可以交替处理多个操作
并行:同一个时刻同时处理多个操作
并发并行异步同步多线程
异步对应的概念是同步。多线程是实现异步的方法。多线程并行(同时进行)(这属于异步)依赖于多核心。多线程并发(把核心比作勺子,把每个线程比作人,把线程的任务比作喝汤。只有一个勺子(单核),一人一口轮着喝(并发))(也属于异步)不依赖与多核心。把一个马桶比作一个CPU核心,线程比做人,那么一个马桶,蹲这个马桶就属于同步,不能拉一半换另一个人拉,然后再换回来接着拉。必须上一个人拉完了,下一个人才能进来拉。
16.C++ list和vector的区别
1.vector数据结构
vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。
因此能高效的进行随机存取,时间复杂度为o(1);
但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。
另外,当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝。
2.list数据结构
list是由双向链表实现的,因此内存空间是不连续的。
只能通过指针访问数据,所以list的随机存取非常没有效率,时间复杂度为o(n);
但由于链表的特点,能高效地进行插入和删除。
16.C++ 基类的析构函数
1.基类的析构函数应该是虚函数。如果不是的话,在删除指针的时候,只有基类的内存被释放而派生类的没有,这样内存就泄露了。
2.子类创建时先调用父类的构造函数,然后再调用派生类的构造函数。当派生对象过期时,先调用派生类的析构,再调用基类的析构。
3.将派生类的引用或指针转换为基类的引用或者指针,这个过程称为强制向上转化。这个时候基类的析构应该设置为虚函数(或者称为父类指针指向子类对象时候,就需要进行设置析构为虚函数)
16.C++ 继承
继承中,关于构造方法的说明,下列说法错误的是(D )
A、子类无条件的继承父类的无参构造方法
B、子类可以引用父类中的有参构造方法,使用super关键字
C、如果子类没有构造方法,则父类无参构造方法作为自已的构造方法
D、如果子类有无参构造方法,而父类的无参构造方法则被覆盖
PS:super相当于base();D错是因为子类父类的构造方法名字都不一样,哪有覆盖一说。
16.C++ 重载
C++里无法重载仅按返回类型区分的函数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。