面试题

1、函数内的static变量会被初始化几次?说一下它的生命周期和什么时候使用。你经常在什么情况下使用static函数?
-初始化1次,生命周期是整个项目。例如异步加载图片中,统计图片张数。

2、lua的基本数据类型有哪几种?lua如何释放对象内存空间?
-number、string、nil、function、table、thread,user data,boolean

3、请讲述static_cast,dynamic_cast,reinterpreter_cast作用。
-静态类型转换,不安全;
-动态类型转换,安全,如果不成功,返回null
-reinterpreter_cast是强制类型转换

4、class A
{
public:
A():value(0){}
~A(){if (value) delete value}
int* value;
void show()
{
printf(“%d”,*value);
}
};

void fun(A a)
{
a.show();
}

int main()
{
int* value = new int(10);
A a;
a.value = value;
fun(a);
return 0;
}
这段代码的输出结果是什么?是否存在问题?如果有问题原因是什么?
-10 , 有问题 ,默认的拷贝构造是浅拷贝,所以出现二次删除。

5、 void A(char* p)
{
p = new char[100];
}
函数A,存在什么问题?需要怎么改进?
-调用函数传递的指针,是传值,所以外面的指针是没有空间的,改为传引用即可。

编程题

1、请写一个循环链表结构,并且有删除节点和增加节点的功能。

#include<iostream>
using namespace std;
typedef struct node
{
    struct node * next;
    int data;
}Node;

Node *createList()
{
    Node * head = new Node();
    head->next = nullptr;
    return head;
}

void addList(Node* head,int data)
{
    if(!head)//链表不存在
    {
        return;
    }
    if(!head->next)//是空链表
    {
        Node *node = new Node();
        node->next = node;
        node->data = data;
        head->next = node;
    }
    else if(head->next == head->next->next)//只有一个
    {
        Node *node = new Node();
        node->next = head->next;
        node->data = data;
        head->next->next = node;
    }
    else//链表已经有数据了
    {
        Node *p = head->next;
        while(p && p->next != head->next)//找到最后一个
        {
            p = p->next;
        }
        Node *node = new Node();
        node->data = data;
        node->next = head->next;
        p->next = node;
    }
}

void printList(Node *head)
{
    if(!head)
    {
        return;
    }
    if(!head->next)
    {
        return;
    }
    Node *p = head->next;
    if(p->data == data)//第一个就是要删除的
    {
        if(head->next == p->next)
        {
            head->next = nullptr;
        }
        else
        {
            Node *q = head->next;
            while(q && q->next != head ->next)//找到最后一个
            {
                q = q->next;
            }
            q—>next = head->next->next;
            head->next = head->next->next;
        }
        delete p;
    }
    else
    {
        p = head->next;
         while (p && p->next != head->next)//找到要删除元素的前一个元素
        {
            if (p->next->data == data)
            {
                break;
            }
            p = p->next;
        }
        if(p->next == head->next)//没有要删除的元素
        {
            cout<<"没有要删除的元素"<<endl;
        }
        Node *q = p->next;
        p->next = q->next;
        delete q;
    }
}

int main(int argc, const char * argv[])
{
    Node *head = createList();
    addList(head, 1);
    addList(head, 2);
    addList(head, 3);
    addList(head, 4);
    deleteList(head, 1);
    cout<<"--------------"<<endl;
    printList(head);
    return 0;
}

2、class A{public: int a};
假设在一个vector中有100个A数据,其中有两个数据key为A.a = 100;使用迭代器从vector中删除这两个数据。

#include <vector>
class A
{
public:
    A(int i):a(i){};
    int a;
};
int main(int argc, const char * argv[])
{
    vector<A>  v;
    v.push_back(A(1));
    v.push_back(A(2));
    v.push_back(A(3));
    v.push_back(A(4));
    v.push_back(A(5));
    v.push_back(A(6));
    v.push_back(A(7));
    v.push_back(A(1));
    v.push_back(A(8));
    for (int i=0; i<v.size(); i++) {
        cout<<v.at(i).a<<" ";
    }
    cout<<endl;
    v.erase(std::remove_if(v.begin(),v.end(), [](A a) { return a.a==1; } ), v.end());
    for (int i=0; i<v.size(); i++) {
        cout<<v.at(i).a<<" ";
    }
    cout<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值