【c++】开发环境IDE、常见调试方法(gdb等)、基础c++语法特性、算法OJ刷题、入门c++项目【持续更新】

1 开发环境&IDE

基本就是如下3款,个人使用体验:
vscode:优点-轻量化,插件多,便于远程调试,缺点-配置复杂
clion:优点-集成环境,最易于上手,缺点-商业软件,收费
visual studio:优点-开发大项目如qt等较为友好 ,缺点-软件太臃肿,太大,不能远程debug

1.1 vscode

vscode配置C/C++环境(超详细保姆级教学)
VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统—保姆级教程

1.2 clion

CLion安装、配置、使用、调试(完全小白向)

1.3 visual studio

编程小白必看!Visual Studio 2022详细安装使用教程(C/C++编译器)
Visual Studio 2022基础使用操作总结

2 常见调试方法(gdb等)

2.1 debug入门

这个博主视频很不错,入门到深度均有涉及

c++调试技术

2.2 远程debug (以Mit 6.S081为例)

2.2.1 vscode远程debug

参考文献:
Mit6.s081环境配置踩坑之旅WSL2+VScode

步骤1:虚拟机网络配置

主要参考:
SSH连接linux虚拟机详细步骤(超详细)
其他参考:
【环境配置】【保姆级教程】VSCode SSH 连接 VMware虚拟机Linux Ubuntu 22.04 配置

步骤2:XV6及qemu环境搭建

qemu搭建完毕如下代表qemu成功:
在这里插入图片描述
复制xv6源码到本地,make qemu,如下代表xv6系统编译成功,ctrl+a松开后再按x退出qemu。
在这里插入图片描述
如上一个源码系统,如果我们不采用现代工具进行debug,使用原生shell进行debug,基本上就是要开两个shell,一个shell执行make qemu-gdb,也就是以debug模式打开qemu, 另一个shell用来调试,打断点之类的。
具体可参考:
课程翻译-3.9 XV6 启动过程
MIT 6S081 qemu-gdb debug调试新手指南!!!
这样做配置很复杂,对新手不友好。
具体过程:
设置gdb信任文件,我这里将所有都放开了,然后按照上面教程调试操作,这样每次都得手动搞一次,且查看源码很不方便。
在这里插入图片描述
在这里插入图片描述

步骤3:Vscode远程调试

上述gdb shell原生方式对新手不友好,所以直接使用vscode插件远程调试,这样既优雅又方便。
参考文档:
哈工大2022年 OS 图形化调试指南

VSCode调试xv6内核代码

2.2.2 clion远程debug

【持续更新…】

3 基础c++语法特性

基础入门:c++菜鸟博客
c++ 指针:除了印度口音以外,目前见到的讲的最好的教程

【强推】通俗易懂C/C++中的指针

4 算法OJ刷题

4.1 推荐刷题网站

基础:数据结构
博客:
十年所学,终成《代码随想录》
labuladong 的算法笔记
github leetcode关键字搜索

4.2 Clion leetcode本地debug刷题指南

leetcode 官方需要开会员才能进行debug调试,不方便,可以直接使用本地clion进行插件OJ。
主要参考文献:
CLion安装、配置、使用、调试(完全小白向)
技巧篇|周末使用Clion愉快刷题 Leetcode(C++)吧
其余参考:
github-aiyolo/leetcode-debug
使用clion刷leetcode
CLion的leetcode插件本地调试方法
使用Clion中的LeetCode刷题插件步骤及常见错误
CLion 配置,LeetCode配置,调试配置

4.2.1 leetcode插件&debug插件安装

安装leetcode官方插件和C/C++ Single File Execution(为了单文件调试方便–在 CMake 项目中,如果想要构建和运行单个 c/cpp 文件,需要在 CMakeLists.txt 需要配置声明 add_executable() ,使用这个插件可以轻松构建和运行单个文件)
在这里插入图片描述
安装完了之后,插件输入leetcode账号ak,sk,同时设置本地tempfile地址(用于下载leetcode题目),此时插件安装完毕
在这里插入图片描述

4.2.2 基础clion 配置

步骤1:将工具链设置成内置mingGW
在这里插入图片描述
步骤2:新建刷题项目,建议c++ 17
在这里插入图片描述
步骤3:在自己项目的目录下,新建如下2个文件
leetcode.h 基础数据结构和来自于Leetcode Playground方便我们将测试用例字符转化为正确的参数。
stdc.h 大家用了都说好的"万能头"文件,主要为了方便主动导入,也可以自己按照所需维护一个头文件替代。
文件git下载地址
在这里插入图片描述
步骤4:配置 Leetcode Editor 模板
配置如下3处:
(1):Custom Template 需要勾选 True
(2):Code FileName = leetcode_num_${question.frontendQuestionId}
(3):Code Template复制以下的代码,简单分析一下就是我们通过导入 stdc.h 和 leetcode.h(在stdc.h中被导入)头文件,避免了我们需要根据代码手动导入头文件,由于 leetcode 中的题目大部分都是定义了一个 Solution 类,如果在一个项目中引入多个题目会导致类重复定义错误,所以我们根据题号创建不同的 namespace ,这样就避免了重复定义,并使用了 using 语法简化了调用,美中不足的是我们并没有自动构建对题目的调用和对测试用例的代码编写,这就是需要我们手动参与的地方,不过有了 leetcode.h 的加持,这一些也不是难事,在下文我们会展示如何使用。【转载–简绘Android】

//import universal *.h
\#include "../../../stdc.h"using namespace std;${question.content}namespace solution${question.frontendQuestionId}{${question.code}
}using namespace solution${question.frontendQuestionId};
int main() {Solution solution = Solution();return 0;
}

在这里插入图片描述

4.2.3 刷题以及debug

步骤1:插件加载题目
配置完成后,点击任意题目后,就会生成下图所示的目录结构(这是按照Java的目录结构生成的,对我们并不影响)
,观察生成的源代码文件,这个题目需要定义结构体 ListNode 在这里并没有出现警告,因为我们的 leetcode.h 已经包含了定义,这时候我们只要右键选择 Add executable for single c/c++ 按钮并点击 CMake 刷新按钮,就可以在上方的运行按钮看到一个新的可运行 CMake Application,到这里你就可以愉快的利用 IDE 的代码提示开心的刷题了。
在这里插入图片描述
利用编辑栏的悬浮窗口,你可以测试和提交自己的代码,如下图所示。
在这里插入图片描述

步骤2:debug题目
如果你提交答案被系统驳回,并告诉了你测试用例,你也可以很容易的去调试它,系统通常给我们的测试用例形如输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] ,观察我们的形参,我们需要组合成 ListNode,对于最后的结果 输出:[8,9,9,9,0,0,0,1]我们最后的返回值为 ListNode ,有了 leetcode.h 现在不需要你去自己构建和翻译链表,stringToListNode 和 listNodeToString轻松帮你搞定这一切。这样,一个题目就轻轻松松的跑起来了。

leetcode题目2参考代码

//import universal *.h
#include "../../../stdc.h"using namespace std;//给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 
//
// 请你将两个数相加,并以相同形式返回一个表示和的链表。 
//
// 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 
//
// 
//
// 示例 1: 
// 
// 
//输入:l1 = [2,4,3], l2 = [5,6,4]
//输出:[7,0,8]
//解释:342 + 465 = 807.
// 
//
// 示例 2: 
//
// 
//输入:l1 = [0], l2 = [0]
//输出:[0]
// 
//
// 示例 3: 
//
// 
//输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
//输出:[8,9,9,9,0,0,0,1]
// 
//
// 
//
// 提示: 
//
// 
// 每个链表中的节点数在范围 [1, 100] 内 
// 0 <= Node.val <= 9 
// 题目数据保证列表表示的数字不含前导零 
// 
//
// Related Topics 递归 链表 数学 👍 11150 👎 0namespace solution2{//leetcode submit region begin(Prohibit modification and deletion)
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/class Solution {public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {int len1=1;//记录l1的长度int len2=1;//记录l2的长度ListNode* p=l1;ListNode* q=l2;while(p->next!=NULL)//获取l1的长度{len1++;p=p->next;}while(q->next!=NULL)//获取l2的长度{len2++;q=q->next;}if(len1>len2)//l1较长,在l2末尾补零{for(int i=1;i<=len1-len2;i++){q->next=new ListNode(0);q=q->next;}}else//l2较长,在l1末尾补零{for(int i=1;i<=len2-len1;i++){p->next=new ListNode(0);p=p->next;}}p=l1;q=l2;bool count=false;//记录进位ListNode* l3=new ListNode(-1);//存放结果的链表ListNode* w=l3;//l3的移动指针int i=0;//记录相加结果while(p!=NULL&&q!=NULL){i=count+p->val+q->val;w->next=new ListNode(i%10);count=i>=10?true:false;w=w->next;p=p->next;q=q->next;}if(count)//若最后还有进位{w->next=new ListNode(1);w=w->next;}return l3->next;}};//leetcode submit region end(Prohibit modification and deletion)}using namespace solution2;
#define L1 "[9,9,9,9,9,9,9]"
#define L2 "[9,9,9,9]"
#define RESULT "[8,9,9,9,0,0,0,1]"
int main() {Solution solution = Solution();ListNode *node=solution.addTwoNumbers(stringToListNode(L1), stringToListNode(L2));cout << listNodeToString(node) << endl;assert(RESULT == listNodeToString(node));return 0;
}

在这里插入图片描述

5 入门c++项目

下面是我工作2年接触到的一些有意思的c++ 项目:
1、CAD方向:
OCCT 开源几何引擎
youtube occt讲解
知乎occt 专业博主推荐的 occt项目
在这里插入图片描述
2、QT:
可以用来自己做一些桌面级开发,一般得visual studio

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34778.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode做题记录----3

1474、删除链表M个节点之后的N个节点 思路&#xff1a; 1、两个循环解决问题 第一个循环移动M个位置&#xff0c;第二个循环确定移动N个位置后的&#xff0c;然后将M位置的节点的next指向&#xff0c;N位置后的节点即可 2、注意边界条件和判空处理 代码实现&#xff1a; pub…

pytorch快速入门——手写数字分类GPU加速

&#x1f451;主页&#xff1a;吾名招财 &#x1f453;简介&#xff1a;工科学硕&#xff0c;研究方向机器视觉&#xff0c;爱好较广泛… ​&#x1f4ab;签名&#xff1a;面朝大海&#xff0c;春暖花开&#xff01; pytorch快速入门——手写数字分类GPU加速 一、tensor1&#…

阿里wan2.1本地部署

1.安装虚拟环境&#xff0c; a) 安装python-3.11.8 b)在本地目录运行 - python -m venv Wan2.1-env - cd Scripts - activate 2.下载代码 git clone https://github.com/Wan-Video/Wan2.1.git cd Wan2.1 3.安装依赖库 pip install torch torchvision --index-url https://…

HTTPS建立连接过程

一、混合加密 通过混合加密的方式可以保证信息的机密性&#xff0c;解决了窃听的风险。 HTTPS采用的是对称加密和非对称加密结合的混合加密方式&#xff1a; &#xff08;1&#xff09; 在通信建立前采用非对称加密的方式交换会话密钥&#xff0c;后续就不再使用非对称加密。 &…

Leetcode-2272. Substring With Largest Variance [C++][Java]

目录 一、题目描述 二、解题思路 【C】 【Java】 Leetcode-2272. Substring With Largest Variancehttps://leetcode.com/problems/substring-with-largest-variance/description/2272. 最大波动的子字符串 - 力扣&#xff08;LeetCode&#xff09;2272. 最大波动的子字符串…

蓝桥杯备赛 Day0_移动零

&#x1f388; 个人主页&#x1f449;&#xff1a;tbRNA-CSDN博客tbRNA-CSDN博客tbRNA-CSDN博客 &#x1f4af; 个人简介&#xff1a;在校大学生一枚&#x1f48b;. &#x1f60d; 希望我的文章对大家有着不一样的帮助&#xff0c;欢迎大家关注我&#xff0c;感谢大家的多多支持…

EDAS:投稿经验-word版本-问题解决

1. 字体不对&#xff0c;字体未嵌入问题 问题&#xff1a;word转PDF后&#xff0c;总是显示有字体格式不对&#xff08;忘记截图了&#xff09;。 办法&#xff1a;1. EDAS投稿PDF格式问题-CSDN博客-PDF上修改 IEEE论文检测的字体未嵌入问题Times New Ro…

TCP/IP协议中三次握手(Three-way Handshake)与四次挥手(Four-way Wave)

TCP/IP协议中三次握手&#xff08;Three-way Handshake&#xff09;与四次挥手&#xff08;Four-way Wave&#xff09; 一、TCP三次握手&#xff08;Three-way Handshake&#xff09;二、TCP四次挥手&#xff08;Four-way Wave&#xff09;三、常见问题解答总结为什么三次握手不…

代码随想录Day16

Day16 二叉树part06 LeetCode 530.二叉搜索树的最小绝对差 题目描述 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 输入&#xff1a;root [4,2,6,1,3] 输出&…

用通义大模型写爬虫程序,汇总各科成绩

需求&#xff1a;根据各科网址&#xff0c;输入学号、姓名查询成绩。 中间反反复复很多次&#xff0c;本文只记下重点的几次和大模型的沟通历史。 输入界面 查询界面 round0&#xff08;最初的问题&#xff09; 请在windows下&#xff0c;使用python的selenium库&#xff0…

Java算法OJ(12)

目录 1.前言 2.正文 2.1Fib数列 2.2单词搜索 2.3杨辉三角 3.小结 1.前言 哈喽大家好吖&#xff0c;今天来分享几道的练习题&#xff0c;欢迎大家在评论区多多交流&#xff0c;废话不多说让我们直接开始吧。 2.正文 2.1Fib数列 题目&#xff1a;斐波那契数列_牛客题霸…

使用傅里叶变换测量声卡的频率失真

文章目录 一、说明二、关于声卡的技术详述三、实验代码获取四、结论 一、说明 假如我希望使用我的声卡来模拟软件无线电&#xff0c;利用声音而不是射频信号。我的声卡能胜任这项任务吗&#xff1f;本文将研究一种技术来找出答案。另外&#xff0c;需要了解音频技术的读者也可…

LeetCode 解题思路 18(Hot 100)

解题思路&#xff1a; 继承 LinkedHashMap&#xff1a; 内置双向链表&#xff0c;自动维护节点的插入顺序和访问顺序。LRU 淘汰逻辑&#xff1a; 覆盖 removeEldestEntry&#xff0c;当元素数量超过 capacity 时&#xff0c;移除最旧条目。removeEldestEntry 方法提供钩子&…

JS基础部分

引入方式 内部脚本 外部脚本 变量 使用let声明变量&#xff0c;弱类型&#xff0c;使用const声明常量 因为箭头函数中this指针有问题&#xff0c;会默认指向父级对象 DOM 文档对象模型&#xff0c;将标记语言的各个部分封装成对应的对象。js通过dom就能够对html进行操作 …

Linux与深入HTTP序列化和反序列化

深入HTTP序列化和反序列化 本篇介绍 在上一节已经完成了客户端和服务端基本的HTTP通信&#xff0c;但是前面的传递并没有完全体现出HTTP的序列化和反序列化&#xff0c;为了更好得理解其工作流程&#xff0c;在本节会以更加具体的方式分析到HTTP序列化和反序列化 本节会在介绍…

QT入门笔记2

目录 一、前言 二、串口助手实现 2.1、串口 2.1.1、可用串口信息-QSerialPortInfo 2.1.2、打开串口-QSerialPort 2.1.3、串口发送接收信息 2.2、定时器-QTimer 2.3、常用属性类型转换&#xff08;会更新&#xff09; 2.4、子控件组规则命名优化 一、前言 这个是学习Q…

DeepSeek(3):DeepSeek R1 提示词⼯程

1 提示词⼯程 5W1H&#xff08;What, Who, When, Where, Why, How&#xff09;是⼀种常⽤的信息收集和指令下达的⽅法。以下是根据这个⽅法为DeepSeek R1模型下指令的例⼦&#xff0c;以“学习⼤模型应⽤开发”为例&#xff1a; &#xff08;1&#xff09;What&#xff08;是什…

Linux入门 全面整理终端 Bash、Vim 基础命令速记

Linux入门 2025 超详细全面整理 Bash、Vim 基础命令速记 刚面对高级感满满的 终端窗口是不是有点懵&#xff1f;于是乎&#xff0c;这份手册就是为你准备的高效学习指南&#xff01;我把那些让人头大的系统设置、记不住的命令都整理成了对你更友好的格式&#xff0c;让你快速学…

RBA+minibatch的尝试

目录 还是咬着牙来写 RBA了 JAX JAX->TORCH torch tensor的变形 pytorch怎么把一个【3,3,5】的tensor变成【3,10,5】&#xff0c;多的用0填充 pytorch如何把shape【100】转成【100,1】 把torch shape【100,1】变成【100】 SQUEEZE grad_fn 不能两次反向传播 还…

Jupyter notebook的安装与使用

jupyter notebook的安装需要在已经安装配置好的conda环境下 win r 打开运行窗口 输入cmd回车 在cmd窗口中输入以下命令 conda install jupyter notebook安装完成后启动 jupyter notebook 也是在cmd窗口 输入 : jupyter notebook运行成功后第一次打开的时候需要选择一个浏览…