C++杂碎知识点

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位系统关系

type3264
char11
unsigned char11
short22
int44
long48
long long int88
float44
double88
long double816
Pointer48

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++里无法重载仅按返回类型区分的函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值