C++
love music.
中山大学计算机博士在读,曾就职于腾讯等公司,目前从事AI多模态大模型研究。
展开
-
《Effective C++》 总结笔记
原文链接:https://blog.csdn.net/a245705313/article/details/81783455转载 2019-12-23 15:43:11 · 328 阅读 · 0 评论 -
MFC、MYSQL连接配置教程(64位)
(1)右链项目-〉属性->配置管理器-〉平台-〉选择x64原因:MFC默认项目是32位,而MYSQL下载的是64位,需要一致(2)右链项目-〉属性-〉c/c++-〉常规->附加包含目录填入: C:\Program Files\MySQL\MySQL Server 5.7\include(3)右链项目-〉属性-〉链接器->常规-〉附加库目录填入: C:\Program Files\MySQL\M...原创 2018-03-24 11:40:08 · 704 阅读 · 0 评论 -
MFC自定义消息
(1)在stdafx.h中,定义如下消息:#define LOGINMSG WM_USER+200(2)比如你要将消息传到login界面,则在login.cpp中定义窗口句柄全局变量HWND login_hwnd;然后在login.cpp的初始化方法中给窗口句柄全赋值:BOOL Login::OnInitDialog(){ CDialogEx::OnInitDialog(); // TO...原创 2018-03-24 17:13:00 · 181 阅读 · 0 评论 -
MFC网络通信传输结构体(服务器获取MYSQL数据库数据传给客户端)
连接数据库: MYSQL m_sqlCon; mysql_init(&m_sqlCon);//初始化数据库对象 if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "student", 3306, NULL, 0)) //localhost:服务器地址,可以直接填入IP;root:...原创 2018-03-24 17:01:03 · 902 阅读 · 0 评论 -
MFC网络通信
服务器端:#include "stdafx.h"#include "dataHandle.h"#include "mysql.h"#include <WinSock2.h>#pragma comment(lib, "ws2_32")void SockInit();int _tmain(int argc, _TCHAR* argv[]){ MYSQL m_sqlCon; mysql_in...原创 2018-03-24 16:44:22 · 891 阅读 · 0 评论 -
网络聊天室(MFC编程)
本应用是一款简单的模拟qq聊天应用.主要分为服务器端与客户端服务器select端:客户端client:服务器端代码如下:select.cpp:// select.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "dataHandle.h"#include#pragma comment(lib, "ws2_32")void SockInit();i...原创 2018-03-24 11:16:52 · 11393 阅读 · 3 评论 -
剑指offer面试题2:实现Singleton模式
不啰嗦,直接上代码~~~#include<iostream>#include<windows.h>using namespace std;HANDLE myLock =CreateMutex(NULL,TRUE,"myLock");//单线程环境 /*class Singleton1{private: Singleton1(){ } stati...原创 2018-05-17 21:36:44 · 185 阅读 · 0 评论 -
时间复杂度与空间复杂度、常见排序算法复杂度分析
时间复杂度与空间复杂度(1)冒泡排序冒泡排序算法的运作如下:(从后往前) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较...原创 2018-05-18 11:14:37 · 504 阅读 · 0 评论 -
剑指Offer面试题1:赋值运算符函数
给类CMyString添加赋值运算符函数,初级做法如下:#include<iostream>#include<string.h>using namespace std;class CMyString{ public: CMyString(const char *pData=NULL); ~CMyString(void); CMyString&am...原创 2018-05-12 10:59:37 · 137 阅读 · 0 评论 -
C++11新特性之nullptr和NULL的区别
#include <iostream>using namespace std;void func(void* t){ cout << "func1" << endl;}void func(int i){ cout << "func2" << endl;}int main(){ fun转载 2018-05-18 15:56:15 · 3961 阅读 · 0 评论 -
C++ STL快速入门
C++ STL中最基本以及最常用的类或容器无非就是以下几个:stringvectorsetlistmap下面就依次介绍它们,并给出一些最常见的最实用的使用方法,做到快速入门。string首先看看我们C语言一般怎么使用字符串的char* s1 = "Hello SYSU!"; //创建指针指向字符串常量,这段字符串我们是不能修改的//想要创建 可以修改的字符串,我们可以使用数组分配空间char...转载 2018-05-15 22:43:22 · 191 阅读 · 0 评论 -
C++ 二叉排序树的创建与遍历
#include<iostream>using namespace std;struct BinaryTreeNode{ int value; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};void addBTNode(BinaryTreeNode **myBT,int val);//添加节点,满足每个父亲节点...原创 2018-06-12 09:43:01 · 1746 阅读 · 0 评论 -
剑指Offer面试题8:二叉树的下一个节点
// 面试题8:二叉树的下一个结点// 题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?// 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。#include<iostream>using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m...原创 2018-06-15 11:24:40 · 525 阅读 · 0 评论 -
C++ QuickSort(二)
通过Partion函数与QuickSort函数实现:#include<iostream>using namespace std;void show(int arr[],int n){ for(int i=0;i<n;i++) cout<<arr[i]<<" "; cout<<endl;}int partion(int arr...原创 2018-06-22 22:01:43 · 279 阅读 · 0 评论 -
时间复杂度为O(n)的排序算法
排序的数字在一个较小的范围之内,要求时间复杂度为O(n),允许使用辅助内存,只允许使用常量大小辅助空间,不得超过O(n).所以解题思路为创建一个临时数组,数组对应位置记录该数字出现的次数,从而将数字实现了排序。#include<iostream>using namespace std;void SortAges(int ages[],int length);void showA...原创 2018-06-24 10:32:54 · 3561 阅读 · 0 评论 -
C++ 单向链表的创建、删除与显示
代码如下所示:#include <iostream> using namespace std; struct ListNode{ int m_nValue; ListNode *m_pNext;};class List{public: List(){ pHead = nullptr; } void showList();//打印链表 void...原创 2018-06-24 16:05:25 · 790 阅读 · 0 评论 -
C++ 标准模版库vector
1 、基本操作(1)头文件#include<vector>.(2)创建vector对象,vector<int> vec;(3)尾部插入数字:vec.push_back(a);(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。(5)使用迭代器访问元素.vector<int>::ite...原创 2018-06-16 21:29:20 · 179 阅读 · 0 评论 -
C++ 标准容器库之map
map详细解说请看该博客:点击打开链接基本操作代码如下:#include<iostream>#include<map>#include<string>using namespace std;int main(){ //key_type, value_type map<int,string> mapStudent; ma...原创 2018-06-16 22:19:55 · 178 阅读 · 0 评论 -
PAT(Basic Level) 1003 我要通过!
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;\任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;\如果 aPbTc 是...原创 2018-06-29 18:44:40 · 135 阅读 · 0 评论 -
剑指Offer面试题16: 数值的整数次方
// 面试题16:数值的整数次方// 题目:实现函数double Power(double base, int exponent),求base的exponent// 次方。不得使用库函数,同时不需要考虑大数问题。代码实现如下:#include<iostream>using namespace std;//考虑正负0指数,以及base是0的特殊情况 double Power(do...原创 2018-06-29 20:41:04 · 196 阅读 · 0 评论 -
C++ 异常处理
直接上代码:#include<iostream>#include<exception>using namespace std;int main(){ int x = 10; int y = 0; try{ if(y==0) throw "分母为0!"; cout<<x/y<<endl; } catch(char co...原创 2018-06-19 10:52:34 · 204 阅读 · 0 评论 -
剑指Offer面试题9(2) :用两个队列实现栈
队列是先进先出,而栈是先进后出,要想实现用两个队列完成栈的功能,可通过如下代码实现:#include<iostream>#include<queue>#include<exception>using namespace std;template<typename T> //或者用template<class T>class C...原创 2018-06-19 11:56:31 · 161 阅读 · 0 评论 -
C ++ 使用tolower()大写字符串转小写字符串
C++并没有直接提供大写字符串转小写字符串,若想通过函数实现,可逐个转换。例:string school;cin >> school;for (int j = 0; j < school.length(); j++) school[j] = tolower(school[j]);...原创 2018-07-01 11:41:26 · 1766 阅读 · 0 评论 -
C++中字符串string和整数int的互相转化方式
原文链接:点击打开链接一、string转int的方式采用最原始的string, 然后按照十进制的特点进行算术运算得到int,但是这种方式太麻烦,这里不介绍了。采用标准库中atoi函数。string s = "12"; int a = atoi(s.c_str()); 对于其他类型也都有相应的标准库函数,比如浮点型atof(),long型atol()等等。采用sstream头文件中定义的字符串流对象...转载 2018-07-08 09:08:16 · 786 阅读 · 0 评论 -
PAT甲级 1005 Spell It Right
1005 Spell It Right (20)(20 分)Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English.Input Specification:Each input file c...原创 2018-07-08 10:16:12 · 108 阅读 · 0 评论 -
PAT甲级 1006 Sign In and Sign Out
1006 Sign In and Sign Out (25)(25 分)At the beginning of every day, the first person who signs in the computer room will unlock the door, and the last one who signs out will lock the door. Given the re...原创 2018-07-08 10:19:21 · 185 阅读 · 0 评论 -
静态存储区、堆、栈之间的区别
一、内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容...转载 2018-06-19 19:38:27 · 13716 阅读 · 3 评论 -
PAT(Basic Level) 1085 PAT单位排行
1085 PAT单位排行(25 分)每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜。本题就请你实现这个功能。输入格式:输入第一行给出一个正整数 N(≤105),即考生人数。随后 N 行,每行按下列格式给出一个考生的信息:准考证号 得分 学校其中准考证号是由 6 个字符组成的字符串,其首字母表示考试的级别:B代表乙级,A代表甲级,T代表顶级;得分是 [0, 100] 区间内的整...原创 2018-07-01 19:50:40 · 490 阅读 · 0 评论 -
PAT(Basic Level) 1002 写出这个数
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10^100^。输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789输出样例:yi san wu解法一如...原创 2018-06-27 10:04:09 · 152 阅读 · 0 评论 -
剑指Offer面试题12: 矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字...原创 2018-06-27 11:00:02 · 266 阅读 · 0 评论 -
PAT甲级 1001 A+B Format
1001 A+B Format (20)(20 分)Calculate a + b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).Inp...原创 2018-07-02 11:15:52 · 183 阅读 · 0 评论 -
C++ STL 自带排序sort()函数的用法
使用sort()函数,头文件#include<algorithm>.排序对象要求是容器vector。使用时你只需编写排序时的比较函数cmp即可。示例代码如下:#include<iostream>#include<vector>#include<algorithm>using namespace std;int cmp(int a,int b...原创 2018-07-02 11:25:37 · 3497 阅读 · 0 评论 -
PAT甲级 1009 Product of Polynomials
1009 Product of Polynomials (25)(25 分)This time, you are supposed to find A*B where A and B are two polynomials.Input Specification:Each input file contains one test case. Each case occupies 2 lines, ...原创 2018-07-09 12:10:14 · 106 阅读 · 0 评论 -
PAT甲级 1002 A+B for Polynomials
This time, you are supposed to find A+B where A and B are two polynomials.InputEach input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomia...原创 2018-07-02 17:13:05 · 111 阅读 · 0 评论 -
剑指Offer面试题13: 机器人的运动范围
// 面试题13:机器人的运动范围// 题目:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它// 每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和// 大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。// 但它不能进入方格(35, 38),因为3+5+3+8=19。请问该机器人能够到达多少个格子?代码实...原创 2018-06-27 16:29:21 · 320 阅读 · 0 评论 -
C++ 如何重载前置++和后置++运算符
参考链接:点击打开链接注意一下几点: 1、前置++重载时没有参数,而后置++重载时有参数。不会使用其参数,仅仅是区分用。可以理解为前置++后面有参数了,所以不需要参数 2、前置++需要返回引用,因为重载自加运算符后可以返回对象的引用, 以方便在表达式中连续使用。而后置++返回的不是引用,所以不能进行连续使用。3.后置运算符返回的值是temp,需要注意。因为是后加。实现代码如下:#include&l...原创 2018-07-09 16:17:19 · 7751 阅读 · 3 评论 -
new和malloc区别
参考链接:点击打开链接0. 属性new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。1. 参数使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。2. 返回类型new操作符内存分配成功时,返回的是对象类型的指针...原创 2018-07-09 16:30:43 · 190 阅读 · 0 评论 -
C++ fill函数,注意与memset的区别
参考链接如下:点击打开链接fill函数包含在algorithm头文件中。示例如下:#include<iostream>#include<algorithm>#include<string.h>using namespace std;int main(){ int arr[10]; fill(arr,arr + 10,1);//按照单元赋值,将一个区...原创 2018-07-02 20:37:33 · 458 阅读 · 0 评论 -
C++ 归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。复杂度分析:归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共要logN步,每步都是一个合并有序数列的过程,时间复杂度可以记为O(N),故一共为O(N*logN)。因为归并排序每次都是在相邻的数据中进行操作,所以归并排序在O(N*logN)的几种排序方法...原创 2018-07-03 11:27:49 · 198 阅读 · 0 评论 -
C++ 二分查找(折半查找)
时间复杂度:Olog(n)算法实现如下:#include<iostream>using namespace std;int binarySearch(int arr[],int l,int r,int k);//二分查找 int main(){ //二分查找要求数组是有序的 int arr[] = {23,54,68,134,145,147,168,190,205,25...原创 2018-07-03 11:57:26 · 693 阅读 · 0 评论