c++岗位基础知识
- c++中函数有三种传递方式:值传递,指针传递,引用传递
- 描述"A小于B或小于C"的表达式为:
- 用new申请某一个类的动态对象数组时,在该类中必须能够匹配到默认构造函数,否成程序会产生一个编译错误
- 举出c++中自定义的数据类型:class,struct,enum,union
- 简述成员函数,全局函数,和友元函数的差别
- 结构struct 和类class有什么区别
- 析构函数有什么作用
- 拷贝构造函数在哪几种情况下调用
- 用类的一个对象去初始化另一个对象时
- 当函数的形参是类的对象时(也就是值传递时),如果是引用传递则不会调用
- 当函数的返回值是类的对象或引用时
- 类与对象有什么区别
- 类和对象(class)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。
- 它们的关系是,对象是类的实例,类是对象的模板。对象是通过new className产生的,用来调用类的方法;类的构造方法
编程题:
int Num0fstr(char *Mstr, char *substr)
{
int number = 0;
char *p;//字符串辅助指针
char *q;//字符串辅助指针
while(*Mstr != '\0')
{
p = Mstr;
q = substr;
while((*p == *q)&&(*p!='\0')&&(*q!='\0'))
{
p++;
q++;
}
if(*q=='\0')
{
number++;
}
Mstr++;
}
return number;
}
判断链表有没有环
bool hasCycle(listnode *head)
{
if(head==NULL)
return;
listnode *fast;
listnode *slow;
fast=slow=head;
while(slow!=NULL&&fast!=NULL)
{
if(fast==slow)
{
return true;
}
slow =slow ->next ;
fast =fast ->next;
if(fast->next !=NULL )
fast=fast->next ;
}
return false;
}
台阶题:问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共需要多少种跳法。
//递归 算法
#include <stdio.h>
#include <iostream>
int fun(int n)
{
if(n==0)
return 0;
if(n==1)
return 1;
if(n==2)
return 2;
return fun(n-1)+fun(n-2);
}
int main()
{
printf("%d\n",fun (4));
}
题目二:变态跳台阶。
一个台阶总共有n级,如果一次可以跳1级,也可以跳2级……它也可以跳上n级。此时该青蛙跳上一个n级的台阶总共有多少种跳法?
//递归
long long Fib(int n)
{
if (n == 0)
return 0;
if (n == 1)
return 1;
if (n == 2)
return 2;
else
return (2 * Fib(n - 1));
}
逆波兰数:
如果遇到数字就压入栈中,如果遇到符号,就取出两个栈中的元素进行运算,然后把运算结果再压入栈中,最后的栈顶元素(也是唯一元素)就是结果。
class Solution {
public:
int evalRPN(vector<string>& tokens) {
if(tokens.size()==1) return stoi(tokens[0]);
stack<int> s;
for(int i=0;i<tokens.size();i++){
if(tokens[i]!="+" && tokens[i]!="-" && tokens[i]!="*" && tokens[i]!="/")
s.push(stoi(tokens[i]));
else{
int nums1 = s.top();
s.pop();
int nums2 = s.top();
s.pop();
if(tokens[i]=="+") s.push(nums2+nums1);
if(tokens[i]=="-") s.push(nums2-nums1);
if(tokens[i]=="*") s.push(nums2*nums1);
if(tokens[i]=="/") s.push(nums2/nums1);
}
}
return s.top();
}
};