C/C++
文章平均质量分 82
夜若渊
勤能补拙
展开
-
C++ 笔面试知识点大全 附超详细解析 【持续更新中】 (校招/实习/大厂/笔试/面试)
C++ 面试知识点详细解析!如果你准备应聘C++有关的工作又不知道如何准备面试,本文会对你有一定的帮助。大部分为本人手打,请多多支持!原创 2022-03-01 21:02:02 · 4424 阅读 · 2 评论 -
C++的顶层const和底层const / const_cast
清晰明了地阐述了C++中顶层const和底层const的具体含义以及const_cast的正确使用方法原创 2022-02-19 13:53:59 · 595 阅读 · 2 评论 -
手把手教你编写C++控制台小游戏 : 2048
原创不易,请勿抄袭作者联系方式 : QQ:993678929文章目录0.游戏界面展示1. 编写思路2. 界面绘制3.键盘控制4.数字的生成与合并5.游戏结束判定#.完整代码0.游戏界面展示1. 编写思路动手写代码之前,先设计好要做哪些部分。下面所述的是我个人的思路,如果有更好的思路欢迎探讨。我们肯定能想到的是游戏界面的绘制,游戏的键盘控制,游戏逻辑。游戏逻辑中包括数字的生成,合并,分数计算,以及游戏结束的判断。棋盘是 4 x 4 的,且只需要显示数字,这可以用一个int数组来表示。原创 2021-02-04 20:48:08 · 3221 阅读 · 2 评论 -
C++ 存储和读取二进制文件以及类的实例
很多时候程序运行时的数据都以类的对象的形式存储,那么如何将这些对象保存使得下一次运行程序的时候可以直接使用呢?Step 1> 首先我们需要知道如何读写二进制文件:inline size_t readBinaryFile(const char * filename,unsigned char* & data) { FILE* fp; fopen_s(&fp,filename, "rb"); if (fp == NULL) return 0; //空指针则返原创 2020-12-28 13:03:07 · 3834 阅读 · 0 评论 -
图像处理: OpenCV编程详解(C++) 【持续更新中】
使用C++在 Visual Studio 2019 环境下OpenCV编程教学原创 2020-11-17 23:40:21 · 22700 阅读 · 17 评论 -
C/C++ Windows进程操作
所用到的头文件:#include <Windows.h>#include <Tlhelp32.h>1.遍历并处理所有进程void dispose_AllProcess(void (*func)(PROCESSENTRY32&)){ HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //创建当前系统的进程快照 if (snapshot == INVALID_HAN原创 2020-09-06 21:22:47 · 1023 阅读 · 0 评论 -
C++读取string字符串的N种方式以及常见问题
整行读取(包括空格)直接用cin读取string的话如果遇到空格会断开,用下面的语句就可以读取包含空格的字符串:getline(cin,sLine);需要注意要getline函数需要先#include <string>整行读取(包括空格)2一个一个字符读取,读到回车键结束(但并不会读入回车键),如果需要对每个字符进行处理的话这种方法最合适,在OJ中运行可能会出现问题 string s = ""; char ch; while ((ch = getchar()) !=..原创 2020-06-20 15:52:13 · 11703 阅读 · 0 评论 -
快速幂(Fast Power)算法简析
快速幂: 快速计算底数的n次幂时间复杂度: O(log₂N)要计算乘幂,我们一般就直接这样写: double myPow(double x, int n) { double ans=1; int flag = 0; if(n<0) {n=-n; flag=1;} for(int i=1;i<=n;i++) ans*=x; if(flag) ans=1/ans; retu原创 2020-05-11 12:38:11 · 629 阅读 · 0 评论 -
用C++实现python的turtle绘图库
头文件:Windows.h 包含了GDI绘图函数math.h : 包含了计算旋转角度,终点坐标等所需要的数学函数利用Windows系统提供的GDI绘图函数,参照MSDN的文档 GDI Objects 我们很容易写出在屏幕上绘制线段的函数:void DrawLine(int sx,int sy,int ex,int ey,int width,int r,int g,int b){ ...原创 2020-03-06 11:53:30 · 1354 阅读 · 0 评论 -
C++ 链表 (linked list)
链表的概念链表,顾名思义,是以链状形式存储的一系列数据。链状结构的特点是环环相扣从一个节点只能走到相邻的下一个节点。链表中的每个节点我们一般用一个结构体来表示,每个节点实际存储位置在内存中是随机的,而不一定是顺序的。我们可以把链表的节点想象成购物商场的储物柜。商场里有很多储物柜,一个储物柜就像一个链表节点:struct ListNode{ int data;} A;储物柜上的编号...原创 2020-03-05 12:45:15 · 2020 阅读 · 0 评论 -
常见数据结构的C语言实现
#include <stdio.h>int main(){ int team[10]={0}; int head=0; int tail=0; team[tail++]=1; //在队列尾部插入元素,同时尾部索引后移 team[tail++]=2; team[tail++]=3; head++; ...原创 2020-02-28 12:06:36 · 738 阅读 · 0 评论 -
C++ 算法题解 (1)
n个人围成圈,依次报数,每次数到m的人淘汰,求最后剩下的人双向链表实现:#include <cstdio>#include <iostream>using namespace std;const int MAX = 100 + 10;int a[MAX],b[MAX];int main(){ int m,n; cin >> n...原创 2020-02-16 12:21:51 · 493 阅读 · 0 评论 -
为什么C/C++很多内部函数由下划线开头?关于VS中的CRT_SECURE
翻阅头文件时总有这个疑问:为啥很多内部函数都是下划线开头的?这是出于某种代码规范吗?翻了很久的MSDN终于找到答案:以下摘自compatibility兼容性通用 C运行时库 (UCRT) 支持实现 C++ 一致性所需的大多数 C 标准库。 它实现 C99 (ISO/IEC 9899:1999)库,但有一些例外情况:在 <th.>中定义的类型泛型宏,以及 <complex ...原创 2020-02-10 15:05:25 · 3284 阅读 · 0 评论 -
控制台应用程序中main函数的参数
摘自MSDN:原创 2020-02-10 14:36:47 · 623 阅读 · 0 评论 -
C/C++ :关于字符串与宽字符串,LPCTSTR , LPCWSTR的解释及其相互转换
定义(参考 : MSDN)LPCWSTR : An LPCWSTR is a 32-bit pointer to a constant string of 16-bit Unicode Charactor, which may be null-terminated.This type is declared as follows:typedef const wchar_t * LPCWST...原创 2020-02-01 06:57:54 · 1825 阅读 · 0 评论 -
C/C++ Windows平台 模拟键盘 / 鼠标操作
原理:调用Windows API头文件: Windows.h鼠标按键使用定义在Winuser.h中的mouse_event函数(Windows.h中已经包含了Winuser.h)该函数定义如下:void mouse_event( DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, UL...原创 2020-01-23 20:55:39 · 5263 阅读 · 0 评论 -
Qt5 多线程 | 子线程向主线程发射信号 | 操作UI 的实现 | 全流程教程
实现多线程:A.为子线程创建一个类1.新建头文件:thread.h 接下来的内容写在该文件中,也可以写在mainwindow.h里,但是不推荐2.添加引用:#include <QThread>3.定义类 , 继承QThread,类名可以自定义4.添加宏定义Q_OBJECT5.定义 run() 函数 ,注意函数名就是run,不可自定义class MyThread ...原创 2020-01-13 13:34:02 · 6236 阅读 · 6 评论 -
Qt5 窗体定义关闭事件全过程
在主窗体类的定义头文件中:文件 : mainwindow.h添加引用:#include <QCloseEvent>在主窗体MainWindow类中添加虚函数定义:protected: virtual void closeEvent(QCloseEvent *); 在主窗体的实现源文件中:文件: mainwindow.cpp添加函数实现: void M...原创 2020-01-13 12:46:35 · 1394 阅读 · 1 评论 -
C++ : string和char *的互相转换
string - > char *:方法1:(转成const char *)string s = "abcdeg";const char *k = s.c_str();方法2: string s = "abcdefg"; char *data; int len = s.length(); data = (char *)malloc((len+1)*sizeof(char...原创 2020-01-12 01:29:13 · 140 阅读 · 0 评论 -
Qt开发问题/TIPS汇总
error: undefined reference to ‘_imp__WSAStartup@8’ or ’ _imp__socket@12 ’错误原因未链接socket库ws2_32.lib解决方法在QT工程文件*.pro当中添加一行即可LIBS += -lpthread libwsock32 libws2_32...原创 2020-01-12 01:16:04 · 404 阅读 · 0 评论 -
C/C++ 控制台输出彩色文本(改变局部字体的颜色)
我写了一个输出彩色文本的函数:void COLOR_PRINT(const char* s, int color){ HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | color); printf(s); SetConsoleTe...原创 2020-01-04 17:33:24 · 11430 阅读 · 3 评论 -
C/C++ Socket套接字编程之TCP(VS2019)
封装了一个客户端接口:写的过程中遇到两个主要的问题:inet_addr(ip)已过期我们熟悉的写法是:add.sin_addr.S_un.S_addr = inet_addr(ip);可以用: inet_pton(AF_INET,ip,&add.sin_addr);来等效替代,其中ip是字符串,add是SOCKADDR_IN类,AF_INET表示使用IPv4地址。注意...原创 2019-12-30 20:55:04 · 2775 阅读 · 3 评论 -
C语言的那些坑(随缘更新)
const char * p 和 char *(const p):用const修饰的变量为常量,值不允许被改变,但如果用const修饰指针变量,则有上述两种方式,那么他们有什么区别呢?const char * p表示指针指向的地址内的值是常量,指针的值(指向什么地址)可以改变,指针指向的地址内的值不可以改变。即我声明了一个const char类型的*p,这个p是一个const char类型...原创 2019-12-20 11:17:29 · 726 阅读 · 0 评论 -
C++ : 函数参数传递的方式
函数参数传递的方式:值传递(pass-by-value)void func(int a)需要将实参拷贝到形参,形参即是实参的副本,时空开销大函数中对实参副本的修改并不会影响到函数调用位置实参的值。引用传递(pass-by-reference)void func(int & a)参数传递的是把实参的地址拷贝到形参,这样形参(和实参数据类型相同!并不是指针)和实参...原创 2019-12-05 14:20:11 · 128 阅读 · 0 评论 -
C++ : 优先队列(prority_queue)
Priority queues are a type of container adaptors, specificallydesigned such that its first element is always the greatest of theelements it contains, according to some strict weak orderingcriterio...原创 2019-11-26 09:48:07 · 1489 阅读 · 0 评论 -
C/C++ 常见小问题&小技巧汇总
0x01 传入数组给函数一维数组func(int arr[10]);func(int arr[]);func(int *arr)二维数组func(int **arr);func(int arr[][10]); //数组的第二维维度一定要显式指定0x02 Visual Studio出现_CRT_SECURE_NO_WARNINGS警告方法1右击项目—>属性–&...原创 2019-11-25 19:48:55 · 132 阅读 · 0 评论 -
C语言文件读写
创建一个文件指针FILE *fp=fopen(“文件路径”,“打开模式”);其中打开模式有:r (read): 只读w (write): 只写a (append): 追加t (text): 文本文件(默认),可省略不写b (binary):二进制文件+: 读和写读取文件(read)...原创 2019-11-17 20:50:41 · 152 阅读 · 0 评论 -
C++ STL:vector
简介向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。从性质上来说,vector属于类模板,可以参考我的另外一篇博客 C++ : 模板(template)头文件: <vector>实例化vector<Type>...原创 2019-11-16 16:38:21 · 277 阅读 · 0 评论 -
索引:C++ 常用标准模板库(Standard Template Library)
索引1. vector向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。...原创 2019-11-16 16:03:23 · 177 阅读 · 0 评论 -
C++ : 模板(template)
C++ : 模板(template)模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector 或 vector 。您可以使用模板来定义函数和类,接下来让我们一起来看看如何使用。...原创 2019-11-16 15:46:39 · 132 阅读 · 0 评论 -
C/C++程序运行的五种内存分区
1.简介在C/C++程序运行时,所使用的内存分为**代码区(Code)、堆区(Heap)、栈区(Stack)、全局/静态存储区(static)、常量存储区(const)**五个分区。注意此处的堆和栈并不是指数据结构2.详解(1)代码区这个区域存放程序包含的所有函数体的二进制代码(2)堆区由用户代码分配/释放,下面的语句将会分配堆上的存储空间:char *p = (char *)m...原创 2019-11-14 11:57:46 · 2344 阅读 · 0 评论 -
C指针-指向数组的指针和指向数组内部元素的指针
1.声明指向数组的指针:int (*p)[5]=&arr;这里的&也可以不写,因为数组名本身就表示数组的首地址2.声明指向数组内部元素的指针:int *p = &arr;int *p= arr;int *p = &arr[0]上面三种声明方式都是合法且等价的 int a[5]={1,2,3,4,5}; int *p=a; ...原创 2019-11-14 10:24:08 · 420 阅读 · 0 评论