当前位置: 首页 > news >正文

40 道高频 C++ 面试、笔试题及答案

1. 什么是多态?
答案: 多态允许对象在运行时表现出不同的行为,具体取决于其类型。

2. 虚函数和纯虚函数之间的区别是什么?
答案: 虚函数可以被派生类重写,而纯虚函数必须被派生类实现,否则派生类将成为抽象类。

3. 指针和引用的区别是什么?
答案: 指针存储变量的地址,而引用是变量的别名。引用必须初始化,而指针可以为 null。

4. 解释 C++ 中的内存管理。
答案: C++ 使用动态内存分配和释放,由 new 和 delete 运算符管理。

5. 什么是智能指针?
答案: 智能指针是自动管理内存的指针,例如 unique_ptr、shared_ptr 和 weak_ptr。

6. 解释 C++ 中的构造函数和析构函数。
答案: 构造函数在创建对象时被调用,析构函数在对象被销毁时被调用。

7. 什么是类的继承?
答案: 继承允许一个类(派生类)从另一个类(基类)继承数据成员和方法。

8. 解释 C++ 中的重载和重写。
答案: 重载允许具有相同名称但不同参数的多个函数,而重写允许派生类中的函数覆盖基类中的同名函数。

9. 什么是模板?
答案: 模板允许创建通用的代码,该代码可以在编译时根据不同类型进行实例化。

10. 解释 C++ 中的异常处理。
答案: 异常处理允许程序处理运行时错误,使用 try、catch 和 throw 关键字。

11. 什么是标准模板库 (STL)?
答案: STL 是一个提供容器、算法和迭代器的库。

12. 解释 C++ 中的流操作符。
答案: 流操作符(<< 和 >>)用于从流(例如文件或控制台)读取和写入数据。

13. 什么是 lambda 表达式?
答案: Lambda 表达式是匿名函数,可以捕获局部变量。

14. 解释 C++ 中的移动语义。
答案: 移动语义允许在不进行复制的情况下移动对象,从而提高效率。

15. 什么是 RTTI?
答案: RTTI(运行时类型信息)允许程序在运行时确定对象的类型。

16. 解释 C++ 中的友元。
答案: 友元是允许非成员函数访问私有或受保护成员的函数或类。

17. 什么是静态成员?
答案: 静态成员属于类而不是特定对象,并且在整个程序中共享。

18. 解释 C++ 中的析构函数顺序。
答案: 析构函数按相反的构造函数顺序调用。

19. 什么是虚继承?
答案: 虚继承允许派生类仅继承基类的指针,从而避免菱形继承问题。

20. 解释 C++ 中的内存对齐。
答案: 内存对齐确保对象在内存中存储在特定边界上,以提高性能。

21. 什么是位域?
答案: 位域允许将多个相关位打包到一个数据类型中。

22. 解释 C++ 中的枚举。
答案: 枚举是一种用户定义的数据类型,表示一组命名常量。

23. 什么是类型转换?
答案: 类型转换将一个数据类型转换为另一个数据类型。

24. 解释 C++ 中的预处理器宏。
答案: 预处理器宏允许在编译时执行文本替换。

25. 什么是编译期多态?
答案: 编译期多态允许在编译时确定函数或方法调用的行为。

26. 解释 C++ 中的虚基类。
答案: 虚基类允许派生类避免菱形继承问题,并确保只有一个基类的副本存储在派生类对象中。

27. 什么是多继承?
答案: 多继承允许一个类从多个基类继承。

28. 解释 C++ 中的异常规范。
答案: 异常规范允许函数指定它可能抛出的异常类型。

29. 什么是模板特化?
答案: 模板特化允许为特定类型提供模板的特定实现。

30. 解释 C++ 中的内存泄漏。
答案: 内存泄漏是指不再使用的内存未被释放,导致程序使用越来越多的内存。

31. 实现一个链表

struct Node {int data;Node* next;
};class LinkedList {
public:LinkedList();~LinkedList();void insert(int data);void delete(int data);bool search(int data);int size();
private:Node* head;Node* tail;
};

32. 实现一个栈

class Stack {
public:Stack();~Stack();void push(int data);int pop();bool empty();int size();
private:vector<int> elements;
};

33. 实现一个队列

class Queue {
public:Queue();~Queue();void enqueue(int data);int dequeue();bool empty();int size();
private:vector<int> elements;
};

34. 实现一个二叉树

struct Node {int data;Node* left;Node* right;
};class BinaryTree {
public:BinaryTree();~BinaryTree();void insert(int data);void delete(int data);bool search(int data);int size();
private:Node* root;
};

35. 实现一个哈希表

class HashTable {
public:HashTable(int size);~HashTable();void insert(int key, int value);int get(int key);bool contains(int key);
private:vector<pair<int, int>> elements;
};

36. 实现一个排序算法(如快速排序、归并排序)

void quickSort(int* arr, int low, int high) {if (low < high) {int pivot = partition(arr, low, high);quickSort(arr, low, pivot - 1);quickSort(arr, pivot + 1, high);}
}int partition(int* arr, int low, int high) {int pivot = arr[high];int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] <= pivot) {i++;swap(arr[i], arr[j]);}}swap(arr[i + 1], arr[high]);return i + 1;
}

37. 实现一个字符串匹配算法(如 KMP 算法)

void kmp(string text, string pattern) {int n = text.length();int m = pattern.length();vector<int> lps(m);computeLPS(pattern, lps);int i = 0;int j = 0;while (i < n) {if (pattern[j] == text[i]) {i++;j++;}if (j == m) {cout << "Pattern found at index " << i - j << endl;j = lps[j - 1];} else if (i < n && pattern[j] != text[i]) {if (j != 0) {j = lps[j - 1];} else {i++;}}}
}void computeLPS(string pattern, vector<int>& lps) {int m = pattern.length();lps[0] = 0;int len = 0;int i = 1;while (i < m) {if (pattern[i] == pattern[len]) {len++;lps[i] = len;i++;} else {if (len != 0) {len = lps[len - 1];} else {lps[i] = 0;i++;}}}
}

38. 实现一个图的遍历算法(如 DFS、BFS)

void dfs(Graph& graph, int start) {stack<int> s;s.push(start);while (!s.empty()) {int v = s.top();s.pop();if (!graph.visited[v]) {graph.visited[v] = true;cout << v << " ";for (int u : graph.adj[v]) {if (!graph.visited[u]) {s.push(u);}}}}
}void bfs(Graph& graph, int start) {queue<int> q;q.push(start);while (!q.empty()) {int v = q.front();q.pop();if (!graph.visited[v]) {graph.visited[v] = true;cout << v << " ";for (int u : graph.adj[v]) {if (!graph.visited[u]) {q.push(u);}}}}
}

39. 实现一个动态规划算法(如背包问题)

int knapsack(int W, int wt[], int val[], int n) {int dp[n + 1][W + 1];for (int i = 0; i <= n; i++) {for (int j = 0; j <= W; j++) {if (i == 0 || j == 0) {dp[i][j] = 0;} else if (wt[i - 1] <= j) {dp[i][j] = max(val[i - 1] + dp[i - 1][j - wt[i - 1]], dp[i - 1][j]);} else {dp[i][j] = dp[i - 1][j];}}}return dp[n][W];
}

40. 实现一个贪心算法(如最小生成树)

class Edge {
public:int src;int dest;int weight;
};class Graph {
public:vector<Edge> edges;int V;int E;
};Graph* createGraph(int V, int E) {Graph* graph = new Graph();graph->V = V;graph->E = E;return graph;
}void addEdge(Graph* graph, int src, int dest, int weight) {Edge edge;edge.src = src;edge.dest = dest;edge.weight = weight;graph->edges.push_back(edge);
}int find(int parent[], int i) {if (parent[i] == -1) {return i;}return find(parent, parent[i]);
}void union(int parent[], int x, int y) {int xset = find(parent, x);int yset = find(parent, y);parent[xset] = yset;
}int kruskalMST(Graph* graph) {int V = graph->V;int E = graph->E;int parent[V];for (int i = 0; i < V; i++) {parent[i] = -1;}int mstWeight = 0;sort(graph->edges.begin(), graph->edges.end(), [](Edge a, Edge b) { return a.weight < b.weight; });for (int i = 0; i < E; i++) {Edge edge = graph->edges[i];int x = find(parent, edge.src);int y = find(parent, edge.dest);if (x != y) {mstWeight += edge.weight;union(parent, x, y);}}return mstWeight;
}

相关文章:

40 道高频 C++ 面试、笔试题及答案

1. 什么是多态&#xff1f; 答案&#xff1a; 多态允许对象在运行时表现出不同的行为&#xff0c;具体取决于其类型。 2. 虚函数和纯虚函数之间的区别是什么&#xff1f; 答案&#xff1a; 虚函数可以被派生类重写&#xff0c;而纯虚函数必须被派生类实现&#xff0c;否则派生…...

【07】进阶html5

HTML5 包含两个部分的更新,分别是文档和web api 文档 HTML5 元素表 元素语义化 元素语义化是指每个 HTML 元素都代表着某种含义,在开发中应该根据元素含义选择元素 元素语义化的好处: 利于 SEO(搜索引擎优化)利于无障碍访问利于浏览器的插件分析网页新增元素 多媒体…...

Linux|centos7|postgresql数据库|yum和编译方式安装总结(全系版本)

一、 yum方式安装postgresql 这个是官方的yum源&#xff0c;包括postgresql的开发包&#xff0c;lib库什么的&#xff0c;很齐全&#xff0c;关键是包括pgbackrest yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-la…...

C++提高笔记(五)---STL容器(set/multiset、map/multimap)

1、set / multiset容器 1.1set基本概念 简介&#xff1a;所有元素都会在插入时自动被排序 本质&#xff1a;set和multiset属于关联式容器&#xff0c;底层结构是用二叉树实现 set和multiset区别&#xff1a; set不允许容器中有重复的元素 multiset允许容器中有重复的元素 …...

详解main函数参数argc、argv及如何传参

目录 1、main()函数参数 2、main函数如何传参 2.1 环境准备 2.2 通过 Powershell 窗口传参 2.3 通过vs界面传参 3、int main() 和 int main(int argc, char *argv[]) 特点 1、main()函数参数 在C语言中&#xff0c;main函数可以带参数。main函数的原型通常为以下两种形式…...

解释什么是Web组件化开发及其优势

解释什么是Web组件化开发及其优势 Web组件化开发&#xff0c;是一种将Web应用的界面和功能拆分为独立、可复用的组件的开发方法。这种方法的核心思想是将大型、复杂的Web应用拆分为一系列小型、功能单一的组件&#xff0c;每个组件都负责处理特定的业务逻辑或界面表现。通过组…...

那些场景需要额外注意线程安全问题

主要学习那些场景需要额外注意线程安全问题&#xff0c;在这里总结了四中场景。 访问共享变量或资源 第一种场景是访问共享变量或共享资源的时候&#xff0c;典型的场景有访问共享对象的属性&#xff0c;访问static静态变量&#xff0c;访问共享的缓存&#xff0c;等等。因为…...

(C语言)球球大作战

前言&#xff1a; 这款简易版的球球大作战是一款单人游戏&#xff0c;玩家需要控制一个小球在地图上移动&#xff0c;吞噬其他小球来增大自己的体积。本游戏使用C语言和easyx图形库编写&#xff0c;旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代码之前&#xf…...

高级数据结构 <AVL树>

本文已收录至《数据结构(C/C语言)》专栏&#xff01; 作者&#xff1a;ARMCSKGT 目录 前言正文AVL树的性质AVL树的定义AVL树的插入函数左单旋右单旋右左双旋左右双旋 检验AVL树的合法性关于AVL树 最后 前言 前面我们学习了二叉树&#xff0c;普通的二叉树没有任何特殊性质&…...

在springboot中利用Redis实现延迟队列

文章目录 前言一、基本思路二、springboot实现案例三、测试总结 前言 在开发过程中&#xff0c;有很多场景都需要用到延迟队列来解决。目前支持延迟队列的中间件也不少&#xff0c;特别是基于JMS模式下的消息中间件基本上都支持延迟队列。但是有时我们项目规模可能比较小&…...

UpGrow评论:AI能将我的Instagram粉丝数增加10倍吗?

UpGrow Review: Can AI Grow My Instagram Followers 10X? 概述 UpGrow是一款专注于Instagram增长的AI驱动型社交媒体工具。它通过其庞大的300多人的网络&#xff0c;先进的定位功能&#xff0c;实时分析以及卓越的客户服务&#xff0c;帮助用户有机地增长Instagram关注者。…...

申请软著提交的演示视频有什么要求

申请软件著作权时&#xff0c;演示视频是一个重要的材料&#xff0c;主要用于展示软件的功能和操作流程。演示视频的要求可能会根据不同的申请机构和项目有所不同&#xff0c;但一般来说&#xff0c;以下是几个常见的要求&#xff1a; 内容完整性&#xff1a;演示视频需要展示…...

mac【启动elasticsearch报错:can not run elasticsearch as root

mac【启动elasticsearch报错&#xff1a;can not run elasticsearch as root 问题原因 es默认不能用root用户启动&#xff0c;生产环境建议为elasticsearch创建用户。 解决方案 为elaticsearch创建用户并赋予相应权限。 尝试了以下命令创建用户&#xff0c;adduser esh 和u…...

面试算法-65-二叉树的层平均值

题目 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[3.00000,14.50000,11.00000] 解释&#xff1a;第 0 层的…...

Linux: boot: latency启动延迟分析

https://elinux.org/images/6/64/Chris-simmonds-boot-time-elce-2017_0.pdf https://www.hcltech.com/sites/default/files/documents/resources/whitepaper/files/an_insight_to_optimize_embedded_linux_boot_time_performance.pdf 无意看到这个启动延迟分析&#xff0c;虽…...

QT界面制作

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowFlag(Qt::FramelessWindowHint);//接收动图QMovie *mv new QMovie(":/pictrue/th.gif…...

进阶二叉树

目录 二叉树 二叉搜索树 二叉搜索树的定义 二叉搜索树的操作 哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的性质 平衡二叉树 平衡二叉树的定义&#xff1a; 平衡二叉树的插入调整 1.LL插入/LL旋转 2.RR插入/RR旋转 3.LR插入/LR旋转 4.RL插入/RL旋转 二叉树…...

无人机拦截

配置yolo CUDA报错 nvcc fatal : Unsupported gpu architecture compute_30.&#xff08;1&#xff09;查看显卡匹配型号&#xff1a;https://blog.csdn.net/u013308762/article/details/121658823 &#xff08;2&#xff09;查看显卡&#xff1a;nvidia-smi -a 》NVIDIA GeF…...

CSDN 编辑器设置图片缩放和居中

CSDN 编辑器设置图片缩放和居中 文章目录 CSDN 编辑器设置图片缩放和居中对齐方式比例缩放 对齐方式 Markdown 编辑器插入图片的代码格式为 ![图片描述](图片路径)CSDN 的 Markdown 编辑器中插入图片&#xff0c;默认都是左对齐&#xff0c;需要设置居中对齐的话&#xff0c;…...

有哪些工具可以替代Gitbook?这篇文章告诉你

你是否曾经在搜索在线文档创建和共享工具时&#xff0c;遇到了Gitbook? Gitbook 是一个相当出色的工具&#xff0c;具有强大的编辑和发布功能&#xff0c;但也有其不足之处&#xff0c;如使用起来有一定的技术要求&#xff0c;入门门槛较高等。如果你正在寻找Gitbook的替代品&…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

算法250609 高精度

加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...

简约商务通用宣传年终总结12套PPT模版分享

IOS风格企业宣传PPT模版&#xff0c;年终工作总结PPT模版&#xff0c;简约精致扁平化商务通用动画PPT模版&#xff0c;素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df...

迁移科技3D视觉系统:重塑纸箱拆垛场景的智能革命

一、传统拆垛场景的困局与破局之道 在汽车零部件仓库中&#xff0c;每天有超过2万只异形纸箱需要拆垛分拣。传统人工拆垛面临三大挑战&#xff1a; 效率瓶颈&#xff1a;工人每小时仅能处理200-300件&#xff0c;且存在间歇性疲劳安全隐患&#xff1a;20kg以上重箱搬运导致年…...

ubuntu系统 | docker+dify+ollama+deepseek搭建本地应用

1、docker 介绍与安装 docker安装:1、Ubuntu系统安装docker_ubuntu docker run-CSDN博客 docker介绍及镜像源配置:2、ubuntu系统docker介绍及镜像源和仓库配置-CSDN博客 docker常用命令:3、ubuntu系统docker常用命令-CSDN博客 docker compose安装:4、docker compose-CS…...