C/C++
文章平均质量分 50
同志啊为人民服务!
我的快乐我做主!
展开
-
.text .data .bss .stack 和 heap
ELF头:包含ELF头的大小、目标文件的类型、.text .data .bss 等文件的位置和大小等信息。.data:已经初始化的全局变量和静态变量(static修饰)放在flash上,断电不失。原创 2024-03-09 17:12:31 · 538 阅读 · 0 评论 -
C++解析字符串获取参数
一些软件在运行时,需要一些命令。这里使用通过字符串的方式,来获取软件启动需要的一些参数。比如:-name1 aaa -name2 bbb有这样一个字符串,通过解析-name1对应的aaa,-name2对应的bbb;原创 2022-06-21 10:33:28 · 1276 阅读 · 0 评论 -
C/C++多线程API详解
文章目录1.多线程并发和同步2.CreateThread3.SetEvent4.WaitForSingleObject5.WaitForMultipleObjects6.CloseHandle7.例子case1: CreateThreadcase2: SetEventcase3: WaitForMultipleObjectscase4: WaitForMultipleObjectscase6: CloseHandle1.多线程并发和同步如果一个单一程序中,有些步骤可以同时进行,则可以把这个单一程序拆分成翻译 2022-03-11 23:20:59 · 1093 阅读 · 0 评论 -
C++开发工程师面试基本知识(汇总)
C++开发工程师面试基本知识(汇总):1.C++中指针和引用的区别;2.静态联编和动态联编(静态多态和动态多态);3.虚函数和多态;4.抽象类(abstract class);5.标准模板库(Standard Template Library,STL);6.STL容器map和unordered_map原创 2022-03-05 13:48:49 · 1305 阅读 · 0 评论 -
提升C++程序运行速度的一些方法
文章目录1.C++程序运行速度与什么有关2.C++提升程序运行速度的一些方法1.C++程序运行速度与什么有关一个C++程序的运行,与许多因素相关。比如,硬件CPU和内存,编译器等。这里,主要是分析程序员可控值的影响因素,从代码的层面分析。代码和数据是程序的基本元素。因此,数据的类型和数据的处理是影响程序运行速度的主要原因。比如,选用哪种合适的数据类型(涉及到内存的存储和之后的运算);变量在内存上的分配方式如何(堆或者栈,静态或者动态);程序的处理逻辑如何(是否可以进一步优化,涉及到算法);2.C原创 2022-02-24 17:20:04 · 6602 阅读 · 2 评论 -
C语言中limits文件和C++中climits文件以及其实质
文章目录1.# include1.# include<limits.h>和# include区别我们知道c++是c的超集,c++中几乎是完全保留c语言,并添加了面向对象和泛型编程。c++语言和c语言在包含头文件时有所区别C语言在包含头文件时,采用# include<limits.h>,以.h为结尾,文件有扩展名C++语言在包含头文件时,不以.h为结尾,文件无扩展名。同时,有些C头文件被转化为C++头文件,这些被重新命名,去掉了.h扩展名,同时在文件名前加c,表明来自于C语言。原创 2022-02-23 16:10:15 · 2177 阅读 · 0 评论 -
VS2019中配置VTK8.2.0
说明首先下载vtk源码,其次通过cmake编译生成VS中可以打开的.sln文件。再使用VS打开.sln文件,对vtk源码进行编译,生成库文件。最终把库文件和一些源文件配置到VS中,即可使用VTK1.需要的软件或工具a.vtk源码 :https://vtk.org/download/b.cmake安装包:https://cmake.org/download/c.Visual Studio 2019笔者选择了vtk8.2.0版本2.Cmake把下载的vtk源码解压缩,并在同级目录下新建两个文原创 2021-12-21 16:16:32 · 4324 阅读 · 7 评论 -
字节面试:在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积
1.题目在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。2.解释这一题可用动态规划求解。假设正方形右下角坐标为(i,j)。只需确定正方形边长len就可以唯一确定一个正方形。使用动态规划求解,最重要的是找到状态转移方程使用一个二维数组dp存储以(i,j)的右下标的正方形中,最大的正方形边长len:逆向推:假设最大正方形的右下角坐标为(i, j),则:以(i-1, j)为右下角的正方形中最大正方形边长:dp[i,j]-1以(i, j-1)为右原创 2021-10-19 19:13:22 · 2036 阅读 · 0 评论 -
二叉树根节点到叶子节点的所有路径和
1.题目2.题解/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** * * @param root TreeNode类 * @return int整型 */ int result=0;//存放二叉树根节点到叶子节点的所有路径和 i原创 2021-10-18 21:00:16 · 730 阅读 · 0 评论 -
二叉树的先序中序后序层序遍历C++实现
1.先上代码#include<vector>#include <iostream>#include <queue>using namespace std;struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int a, TreeNode* l, TreeNode* r) { val = a;原创 2021-10-18 19:55:51 · 1427 阅读 · 0 评论 -
结构体字节对齐后结构体大小计算
1.示例我们来一个例子来看,结构体对齐后,结构体大小的计算#include<iostream>using namespace std;#pragma pack(2)struct Test { int a; char b; short c; char d;};int main(){ Test a; cout << sizeof(a) << endl; cout << &a<< endl; return 0;}原创 2021-10-15 11:06:03 · 373 阅读 · 0 评论 -
有重复数字的升序数组的二分查找
1.题目描述描述请实现有重复数字的升序数组的二分查找给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1示例1输入:[1,2,4,4,5],4返回值:2说明:从左到右,查找到第1个为4的,下标为2,返回2示例2输入:[1,2,4,4,5],3返回值:-1示例3输入:[1,1,1,1,1],1返回值:0题目链接:NC105 二分查找-II2.原创 2021-09-17 14:36:30 · 2118 阅读 · 0 评论 -
判断链表中是否有环
1.基本概念如图所示,所谓链表中有环,一定是第一种情况,不会是第二种情况(因为每个结点仅有一个next,不会出现分叉的情况)。题目链接:NC4 判断链表中是否有环2.解题思路明白所谓的“链表有环”后,就可以根据“链表有环”的特点来判断链表中是否有环。当我们对一个链表从头结点开始进行遍历时,如果链表无环,一定会存在“遍历到某个结点p,p->next为NULL”的情况。但是反言之,如果遍历不到“某个结点p,p->next为NULL”的情况,我们不能说明该链表中有环。因为所谓的“遍历不到”原创 2021-09-17 13:57:22 · 550 阅读 · 0 评论 -
最长无重复字串(滑动窗口法C++)
1.题目描述输入一个字符串,给出该字符串的最长无重复字符的子串。2.分析解题思路1:暴力解题:遍历所有子串,判断是否无重复子串,把最长的记录下来。解题思路2:滑动窗口法:所谓滑动窗口是一个形象的说法。这里指的是使用两个指针left和right表示子串的两端。用一个结构来记录每个字符在窗口中出现的次数。先走右指针right,把右指针指向的字符放入map中,记录此字符出现的次数,然后右指针往前走一位。接着收缩左指针,当当前字符对应的value大于1时,表明该字符在窗口中,收缩左窗口,使得不符合原创 2021-09-14 20:45:30 · 327 阅读 · 0 评论 -
创建一个单链表,并输出单链表(C++)
1.题目要求创建一个带头结点的单链表,并打印输出链表的值分析:首先要搞清楚什么是头结点,正常情况下一个单链表是不带头结点的。为了对单链表插入或删除操作的方便,特意引入了头结点。头结点指向链表中第一个结点。如图所示,展示了“不带头结点的单链表”和“带头结点的单链表”。两者比较,“带头结点的单链表”实际上就在“不带头结点的单链表”前增加了一个结点。这个可以有数据域(比如存储表长等),也可以数据域中不存储东西,但它的指针域一定指向单链表的第一个元素。2.代码#include<iostream&g原创 2021-09-14 15:19:40 · 7219 阅读 · 0 评论 -
字节笔试题:判断双生词
1.题目描述题目:链接2.解答#include<iostream>#include<vector>using namespace std;//判断两个字符串为双生词bool JudgeShuanfsheng(string str1,string str2){ //cout << "str1:" << str1 << endl; //cout << "str2:" << str2 <&l原创 2021-09-11 17:25:36 · 85 阅读 · 0 评论 -
二维vector的初始化,使用二维vector时:vector subscript out of range
1.错误代码: vector<vector<int>> dp; dp[i][j] = 12.错误原因二维vector,一定要只有初始化后,才能按二维数组dp[i][j]的样式访问。3.二维vector的初始化方法1: 采用构造函数 vector<vector<int>> dp(n, vector<int>(m)); //n行m列,全部初始化为零方法2:直接初始化: vector<vector<int>原创 2021-08-24 14:45:12 · 832 阅读 · 0 评论 -
寻找第K大(借用快排思想)
1.题目:牛客网 NC88 (寻找第K大)描述有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(1<K<n),请返回第k大的数(包括重复的元素,不用去重),保证答案存在。要求时间复杂度O(n)示例1输入:[1,3,5,2,2],5,3返回值:2 2.解题思路这题给了提示,可以借用快排的思想。同时要注意对事件复杂度的要求是O(n)。对于快排不熟悉的,建议看下我的这篇博文:快速排序详细讲解和代码实现先给大家原创 2021-08-23 17:33:31 · 144 阅读 · 0 评论 -
快速排序详细讲解和代码实现
1.快速排序快排的基本思想是分治策略:在待排序表L[1…n]中任意取一个元素pivot作为基准。通过一趟比较大小将待排序表L[1…n]划分为独立的两部分L[1…k-1]和L[k+1…n],使得L[1…k-1]中所有元素小于pivot,L[k+1…n]中所有元素大于或等于pivot。,pivot放在了最终位置L[k]上,这样就完成了第一趟快排。然后,再分别递归地对两个字表重复上述过程,直至每部分只有一个元素或空为止。这样,排序完成。2.代码实现快排函数为QuickSort(),划分函数为Partiti原创 2021-08-23 11:43:42 · 759 阅读 · 0 评论 -
合并两个有序数组(双指针解题)
1.题目:牛客网 NC22 (合并两个有序的数组)描述给出一个整数数组A和有序的整数数组B,请将数组B合并到数组A中,变成一个有序的升序数组注意:1.可以假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为m和n,A的数组空间大小为m+n2.不要返回合并的数组,返回是空的,将数组B的数据合并到A里面就好了3.数组A在[0,m-1]的范围也是有序的例1:A: [4,5,6,0,0,0],m=3B: [1,2,3],n=3合并过后A为:A: [1,2,3,4,5,6]原创 2021-08-21 21:31:27 · 2329 阅读 · 0 评论 -
最长无重复子数组/最长无重复字串详细解法
1.题目:牛客网NC41( 最长无重复子数组)描述给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组 示例输入:[2,2,3,4,3]返回值:3说明:[2,3,4]是最长子数组 2.滑动窗口法解题此类题目,我先带大家理一下思路。所谓滑动窗口法是指设置两个指针,left和right表示窗口的两边。右指针往前走,有指针每走原创 2021-08-21 15:05:15 · 2499 阅读 · 0 评论 -
用两个栈实现队列
1.题目:牛客网NC76(NC76 用两个栈实现队列)描述用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。示例:输入:["PSH1","PSH2","POP","POP"]返回:1,2解析:"PSH1":代表将1插入队列尾部"PSH2":代表将2插入队列尾部"POP“:代表删除一个元素,先进先出=>返回1"POP“:代表删除一个元素,先进先出=>原创 2021-08-20 11:25:22 · 190 阅读 · 0 评论 -
error: non-void function does not return a value [-Werror,-Wreturn-type]
非void函数一定要有返回值检查代码中是否没有return语句,返回一个值原创 2021-08-20 10:25:56 · 7353 阅读 · 0 评论 -
反转链表详细讲解(就地逆置法)
1.题目:牛客网NC78(反转链表)描述输入一个链表,反转链表后,输出新链表的表头。示例1输入:{1,2,3}返回值:{3,2,1}2.就地逆转法反转链表只需要两个指针beg和end,解题思路参考单链表反转详解(4种算法实现)本文是对单链表反转详解(4种算法实现)中提到的“就地扭转法”的详细扩充。具体步骤,见笔者画的示意图(字迹稍潦草,不印象理解内容)就地逆置法则是直接对原链表做修改,从而实现将原链表反转。步骤详解(看图食用更佳)第一步:申请两个指针beg和end(开始和结束),原创 2021-08-18 11:29:00 · 1152 阅读 · 0 评论 -
二分查找法的递归和非递归实现(C++)
文章目录1.二分查找法思想2.算法使用前提3.递归实现(C++)4.非递归实现(C++)1.二分查找法思想折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是:(这里假设数组元素呈升序排列)将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止;如 果x<a[n/2],则我们只要在数组a的左半部继续搜索x;如果x>a[n/2],则我们只要在数组a的右半部继续搜原创 2021-08-06 21:04:49 · 2244 阅读 · 0 评论 -
Xerces C++实现xml文件解析
1.xml解析xml文件解析有DOM, SAX方式。 DOM解析: 是相当于把整个xml结构以树形结构读进内存中。 优点:很方便实现增删改操作 &nb原创 2021-06-20 15:59:21 · 1315 阅读 · 0 评论 -
Xerces的下载,编译和在VS 2019中的配置
1.下载笔者选用的是Xerces 3.1.2版本:https://archive.apache.org/dist/xerces/c/3/sources/注:下载该版本的源文件,编译生成库文件时很方便。因为该源文件中有.sln文件,可以便于使用VS打开,然后进行编译。2.编译.编译xerces,获得dll文件和lib文件具体方法:下载xerces-c-3.1.2.zip后进行解压。加压后,打开E:\xerces-c-3.1.2\projects\Win32\VC12\xerces-all\xe原创 2021-06-03 19:07:03 · 2316 阅读 · 2 评论 -
C/C++中字符串操作函数strcpy,strcat,strlen等
典型的字符串操作函数:1.void strcpy(const char* str1,const char* str2) 字符串拷贝函数,把str2拷贝到str1中。需要注意要使拷贝生效,str1与str2的长度要相等头文件:#include <cstring>或者#include <string.h>建议C语言中使用#include <string.h>,C++中使用#include <cstring>例如:char str1[] = "abcdef原创 2021-05-04 17:52:26 · 410 阅读 · 0 评论 -
c语言:判断一个数是不是同构数
题目:实现1:#include<stdio.h>#include<math.h>int main(){ int a, b,c, d, x; scanf("%d %d", &a, &b); for (x = a;x <= b;x=x+1) { bool is=true;//标志位,默认一个数是同构数。 //然后判断它的个位,十位,百位...是否与平方数的个位,十位,百位相等 //如果有一个不相等,则把标志位置fal原创 2021-04-28 20:29:15 · 6061 阅读 · 0 评论 -
C++中三种函数传参方法
三种传参方式为:传值调用、指针调用和引用调用区别:传值调用不会改变实参的值,而指针调用和引用调用会改变实参的值。示例程序:#include <iostream>using namespace std;void swap(int a,int b);void swap_zhi(int *a,int *b);void swap_yin(int &a,int &b);int main (){ int a,b; cin>>a>>b原创 2021-04-28 00:09:45 · 234 阅读 · 0 评论 -
C++中.(点)和 ->(箭头)的区别
用法:对象.属性 对比 指针->属性or对象.方法 对比 指针->属性示例程序:class A{ private: int num; public: A(int n){num=n;}//类的构造方法 int getNum(){return num;} ~A(){}//类的析构方法}A a(10);int b=a.getNum();//此时b的值为10;A *aa=new A(10);int bb=aa->getNum();//此时bb的原创 2021-04-27 23:10:03 · 546 阅读 · 0 评论 -
C++中线程同步的四种方法(Win32平台)
1.同步和互斥互质是一种特殊的同步。线程同步一般指线程之间的执行存在某种程度上的相互依赖关系。2.C++中线程同步的四种方法(1)事件(Event);(2)信号量(semaphore);(3)互斥量(mutex);(4)临界区(Critical section)。————————————————————————————————(1)事件/*头文件*/#include<windows.h>使用CreateEvent创建一个事件使用SetEvent设置某个时间有信号使用Wa原创 2021-04-23 16:23:30 · 1922 阅读 · 0 评论 -
windows下安装opencv(c++版本),并配置到Qt中
1.软件环境OpenCV:https://opencv.org/releases/Qt:https://download.qt.io/archive/qt/CMake:https://cmake.org/download/Qt Creator: https://download.qt.io/archive/qtcreator/注:大家选择合适的版本安装即可,Qt和Qt creator的安装配置,可以参考我的博客:Win10安装Qt5和Qt Creator这篇主要讲opencv的安装2.下载原创 2021-04-10 22:18:13 · 1708 阅读 · 0 评论 -
Debug模式下,编译器无法定位到某一条语句 原因分析
1.问题描述Debug模式下,编译器无法定位到某一条语句正常情况下,在编译器Debug模式下出错是可以定位到某一个语句的但有一次我在Debug模式调试时出错,编译器无法定位到某一条语句,只是给出了错误提示2.原因分析问题可能出在库上,程序在执行中需要用到一个库。这些库封装的是一个算法(自己写的),问题可能处在算法内部(库)上,因为是库,所示没有定位到出错在哪一条语句。测试是否出在库上,可以把使用该库的内部函数的代码屏蔽,如果程序执行不报错,问题就可能出在库上。...原创 2021-03-15 14:43:18 · 406 阅读 · 0 评论 -
The inferior stopped because it received a signal from the Operating system signal name: SIGSEGV
1.问题描述The inferior stopped because it received a signal from the Operating system.Signal name: SIGSEGVSignal meaning: Segmentation fault2.可能的原因a.空指针问题:检查指针是否初始化b.指针越界问题:检查是否越界c.野指针问题:参考空指针和野指针的区别如果帮到了你,请点赞关注哦!...原创 2021-03-15 14:09:53 · 3745 阅读 · 0 评论 -
a function-definition is not allowed here before ‘{’ token
在一个函数体内一般不允许定义一个函数。这个问题一般是少个}造成的。检查函数的{}对齐问题可能出在错误提示前面的函数。原创 2021-03-12 10:25:35 · 28475 阅读 · 3 评论 -
C++中宏定义字加括号的意义
1.示例#define DI_INPUT_NUM (11)2.为什么宏定义要加括号强烈建议宏定义要给表达式加括号,这是一种良好的编程习惯,可以避免出错!宏定义的本质是直接替换!!!宏定义后面的表达式直接替换宏定义名字!下面举例来说明下面两种宏定义,产生了截然不同的结果:#define DNUM 11+2 //宏定义方式1#define DNUM (11+2) //宏定义方式2在程序中使用到了原创 2020-12-23 10:56:23 · 4650 阅读 · 0 评论