C/C++
pengshengli
横看成峰侧成岭,远近高低各不同。
不识庐山真面目,只缘身在此山中。
展开
-
C语言去掉小数后面无效的0
#include <time.h>#include<stdio.h>#include<string>#include<vector>#include <algorithm>#include<map>#include<iostream>int main() { double a = 114.5149; printf("%g\n", a); .原创 2021-11-19 19:59:55 · 3209 阅读 · 0 评论 -
map的value是函数 it->second()和it->second区别
#include <time.h>#include<stdio.h>#include<string>#include<vector>#include <algorithm>#include<map>#include<iostream>void *fun1(){printf("jhell\n");}void *fun2(){}typedef void*(*T)(void);int main() { .原创 2021-08-24 21:29:26 · 2051 阅读 · 0 评论 -
C++参考文档
https://docs.microsoft.com/en-us/cpp/cpp/cpp-language-reference?view=msvc-160https://en.cppreference.com/w/原创 2021-07-29 14:48:50 · 400 阅读 · 0 评论 -
C++ MD5计算
C++ MD5计算投文件#include <openssl/md5.h>std::string md5sum(const std::string &str) { std::string md5; MD5_CTX ctx; MD5_Init(&ctx); MD5_Update(&ctx, str.c_str(), str.size()); unsigned char digest[MD5_DIGEST_LENGTH];.原创 2021-01-28 22:28:24 · 2337 阅读 · 0 评论 -
进程空间分配和堆栈大小
https://www.cnblogs.com/ladawn/p/8449399.html转载 2019-11-26 10:06:57 · 501 阅读 · 0 评论 -
int与CString互转
int转CStringint port = 8080; CString tempPort;tempPort.Format(_T("%d"), port ); //Use Unicode Character SetCString转int CString strData = “8888”int data = _ttoi(strData)使用 Uni...原创 2019-04-08 15:52:59 · 9487 阅读 · 0 评论 -
对话框在DLL中DoModal()返回-1?
情景:主工程调用封装的DLL,其中DLL里面有对话框,也就是说主工程调用DLL里的导出类的成员函数,成员函数再启动对话框。(直接导出(AFX_EXT_CLASS)对话框类的话会报错,具体还没研究)DoModal()总是弹不出对话框,DoModal()返回值为-1,开始以为是资源ID等一系列的问题。MFC对话框DoMoal返回-1检查了好几遍,又重新建对话框类,也还不行。但是主工程的对话框可...原创 2019-04-12 09:59:53 · 1563 阅读 · 0 评论 -
* CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
错误:* CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodul.obj)这个错误和要生成的DLL类型有关系,具体参考:_USRDLL _AFXDLL _WINDLL 三种dll编译宏的具体含义所以需要修改宏,以vs2013为例:按照...原创 2019-04-23 10:11:51 · 931 阅读 · 0 评论 -
error LNK2001: unresolved external symbol "__declspec(dllimport) const XXXX::`vftable'"
错误:error LNK2001: unresolved external symbol "__declspec(dllimport) const CXxxxxx::`vftable'" (__imp_??_7CXxxxxx@@6B@)建的类是导出类,以DLL扩展的方式导出,需要加宏_AFXEXT...原创 2019-04-23 10:21:36 · 1488 阅读 · 2 评论 -
单文档让默认的菜单栏不显示
第一步:在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)注释下面几行:if (!m_wndMenuBar.Create(this)) { TRACE0("未能创建菜单栏\n"); return -1; // 未能创建 }第二步:在int CMainFrame::O...原创 2019-04-28 16:55:38 · 298 阅读 · 0 评论 -
排序
1.冒泡排序(O(n2) 稳定)2.插入排序(O(n2) 稳定)3.选择排序(O(n2) 不稳定)4.归并排序(O(nlogn) 稳定)5.快速排序(O(nlogn) 不稳定)// sort.cpp: 定义控制台应用程序的入口点。////#define _CRT_SECURE_NO_WARNINGS#define INC_03_SELECTION_SORT_DETECT...原创 2019-05-04 19:50:59 · 140 阅读 · 0 评论 -
二叉树
1.LeetCode 94. 二叉树的中序遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), rig...原创 2019-05-06 09:38:12 · 149 阅读 · 0 评论 -
error LNK2019: unresolved external symbol
极有可能C++程序里引用了C代码。解决方法: 给引入的头文件加上extern "C",也就是说用下面的格式把头文件包起来:https://blog.csdn.net/jd_19900903/article/details/26262155...原创 2019-04-11 08:44:03 · 1006 阅读 · 0 评论 -
构造函数、复制构造函数、重载赋值运算符
构造函数、复制构造函数、重载赋值运算符这几个概念经常搞混,接下来从原理上区别一下:#include"stdafx.h"#include<iostream>class Shop {private: std::string name; double price;public: Shop() { } Shop(const Shop &s) { name...原创 2019-03-18 13:12:44 · 195 阅读 · 0 评论 -
C++多线程编程
多线程含义 死锁与竞争 原子操作 线程池资料:http://0xffffff.org/2013/07/30/19-linux-thread-history/http://ifeve.com/c-concurrency-hello-world/#more-9916原创 2019-03-13 09:59:06 · 116 阅读 · 0 评论 -
C++中的lambda表达式
C++11引入了lambda表达式,lambda(λ)的本身含义是“匿名函数”的意思。原创 2019-03-13 09:35:16 · 105 阅读 · 0 评论 -
项目编译过程
预处理 编译 汇编 链接1.预处理首先新建preprocess.cpp文件,输入代码:#include<iostream>#define add(a,b) a+bint main(){ int c = 1; int d = 2; int e = add(c,d); std::cout<<...原创 2019-03-19 22:31:13 · 668 阅读 · 0 评论 -
C++中的智能指针
C++中有三种智能指针:std::unique_ptr、std::shared_ptr、std::wake_ptr,都在<memory>头文件定义中。出现智能指针的缘由:C++内没有内存回收机制,程序员分配和释放经常会出错。1.unique_ptr在unique_ptr之前,C++98引入了auto_ptr,但在C++11标准中auto_ptr被标为遗弃;主要原因有:(...原创 2019-03-01 17:19:30 · 241 阅读 · 0 评论 -
error LNK2019: unresolved external symbol "__declspec(dllimport) int __cdecl
原因:多数是因为引用的变量或者函数没有导出解决方法:通过工具(Dependency Walker)查看函数有没有导出:http://www.dependencywalker.com/查看列表,看看导出了没?导出方法:https://www.cnblogs.com/dongsheng/p/3924287.html ...原创 2019-02-20 11:12:53 · 2471 阅读 · 0 评论 -
CString 和 LPCTSTR 之间的转换 及 LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化
转:https://www.cnblogs.com/magic-cube/archive/2011/05/09/2041692.html转载 2019-02-19 16:00:23 · 580 阅读 · 0 评论 -
AFX_EXT_CLASS的使用
如果要导出一个类(生成DLL提供给另外工程使用)定义的时候加AFX_EXT_CLASS并且在预定义配置项加上_AFXDLL 和 _AFXEXT 另个宏参考:https://blog.csdn.net/kenkao/article/details/7872644...原创 2019-02-19 13:28:48 · 2360 阅读 · 0 评论 -
链表
1.LeetCode 206. 反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL步骤:0.初始时,pre = NULL,cur = head,pre来保存已经反转好的头节点,cur来保存正要反转的节点(即pre后面的节点);nxt来保存...原创 2019-04-30 16:25:13 · 200 阅读 · 0 评论 -
gdb
0.绪GDB(GNU Debugger)是类 Unix(如 Linux)操作系统下的一款开源的 C/C++ 程序调试器。要使用gdb进行调试,需要在gcc/g++命令选项加“-g”,去掉调试信息使用“strip”命令。例如:下面fork.c文件:#include<stdio.h>#include<unistd.h>int main(){ ...原创 2019-05-08 20:49:54 · 195 阅读 · 0 评论 -
valgrind的使用
1.官网:http://valgrind.org/2.执行:valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./YourProgram原创 2019-10-09 17:18:56 · 108 阅读 · 0 评论 -
结构体(类)类型排序
struct heat { heat(double a, double b, double c) :h1(a), h2(b), h3(c) {} double h1; double h2; double h3;};bool comp(heat a, heat b){ if (fabsf(a.h1 - b.h1) > 0.000001) { if (a.h1 - b.h...原创 2019-09-22 23:54:18 · 260 阅读 · 0 评论 -
几个MFC的问题记录
.CListCtrl1.格式//设置风格DWORD dwStyle = m_List.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)m_List.S...原创 2019-07-26 10:55:02 · 173 阅读 · 0 评论 -
C++11新特性
1.long long 类型2.列表初始化3.nullptr常量4.constexpr变量5.类型别名声明6.auto类型提示符原创 2019-06-30 21:50:45 · 139 阅读 · 0 评论 -
多线程中的count++问题---互斥、自旋、原子操作
1.互斥mutex:阻止其他线程的进入,其他线程会挂起2.自旋锁:一直等,(while(1))线程不会切换,操作时间比较短,简单的适合自旋锁3.原子操作:三条指令合在一起#include<stdio.h>#include<pthread.h>#include<unistd.h>#define THREAD_NUM 10pthread_mut...原创 2019-06-11 21:28:59 · 555 阅读 · 0 评论 -
对话框屏蔽Esc键的方法
默认的,MFC里面当对话框弹出后,按“Esc”键对话框会退出。但有时候想屏蔽这个功能,思路就是屏蔽WM_KEYDOWN消息中的VK_ESCAPE先添加PreTranslateMessage函数,然后再里面添加一下代码段:BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code h...原创 2019-06-04 08:37:08 · 1587 阅读 · 0 评论 -
ASSERT(AfxGetThread() == NULL);
现象:找到源码位置:感觉是线程之类的的东西没有初始化,查了一些资料说缺少_USRDLL宏,问题解决了,但不知道为什么。先参考这个宏是干什么的:_USRDLL _AFXDLL _WINDLL 三种dll编译宏的具体含义接下来发现没有加_USRDLL宏是不会执行CWinApp::InitInstance();这一句。综上:(1)结论就是Windows里的编程需...原创 2019-05-29 09:20:11 · 835 阅读 · 0 评论 -
线程池
线程池的作用:在并发编程过程中,会使用线程去执行任务,那么一般的做法是:创建一个线程,执行任务,然后销毁。但是在某些应用场景总需要多个线程去执行任务,频繁的创建和销毁线程会增加一些额外的负担。所以可以这样做:创建一大堆的线程,放在这个池子里,他们在程序运行过程中,一般都不销毁。线程池的设计根据应用场景设计: 主要设计三部分内容:1.设计一个队列保存任务;2.任务队列没有...原创 2019-05-22 22:46:17 · 114 阅读 · 0 评论 -
线程的同步手段
线程诞生是从LinuxThreads--->NTPL为了减少切换的代价,线程共享了进程中的资源,进而由于公用了资源,多个线程使用时就需要有序的进行,保证不乱;这种方式就是线程的同步。同步的手段有一下几种:1.互斥锁如果没有请求到锁,那么就把该线程放入等待队列里,挂起整个线程;如果持有锁的线程执行完且释放锁,则会唤醒等待队列里的某个线程去执行。#include <pth...原创 2019-05-22 22:39:58 · 134 阅读 · 0 评论 -
线程
进程是管理资源的单位,线程是CPU调度的基本单位。1.定义linux线程创建函数的定义: #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), ...原创 2019-05-22 21:38:37 · 220 阅读 · 0 评论 -
libevent的使用
注:本例是在windows平台上使用1.官网:http://libevent.org/下载:libevent-2.1.8-stable2.使用vs命令工具进行编译:我使用vs2013。进入到libevent-2.1.8-stable目录下执行:nmake /f Makefile.nmake执行完之后,会生成三个lib文件:libevent.lib lib...原创 2019-05-22 12:26:51 · 907 阅读 · 0 评论 -
使用宏定义max函数
1.#define MAX(x,y) x > y ? x : y2.#define MAX(x, y) (x) > (y) ? (x) : (y)3.#define MAX(x, y) ((x) > (y) ? (x) : (y))前三中逐次解决了展开运算符优先级的问题,但还有中情况:MAX(i++, j),展开后(假设i=3,j=...原创 2019-05-21 23:28:14 · 7196 阅读 · 3 评论 -
log4cpp的使用
1.官网http://log4cpp.sourceforge.net/2.编译(windows ) vs2010直接打开:log4cpp工程是生成动态库的,log4cppLIB是生成静态库的,然而我没有编译成功。报下面的错:CUSTOMBUILD : fatal error RC1110: could not open .\Debug\NTEventLogCa...原创 2019-05-16 17:33:24 · 723 阅读 · 0 评论 -
常用字符串函数的实现
一、库函数的实现1.strcpy#include<stdio.h>#include<assert.h>//1.strcpy*******char* strcpy(char* dest, const char* source){ assert((dest != NULL) && (source != NULL)); char* res =...原创 2019-05-20 23:19:31 · 147 阅读 · 0 评论 -
protobuf(C++)的使用(windows)
注:这里说的是C++版本的使用。1.前言官网:https://github.com/protocolbuffers/protobuf/releasesprotobuf托管在github,在windows上使用需要自己编译,编译需要借助cmake。大概流程是:a.下载源码-->b.cmake生成vs工程-->c.vs编译(所需lib文件和protoc.exe)-->...原创 2019-05-20 17:39:31 · 10686 阅读 · 4 评论 -
makefile
1.介绍 make命令执行的时候一定需要一个Makefile文件,通过这个Makefile告诉make命令需要怎么样的去编译和链接程序。make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。2.Makefile规则target... : prerequisites ... command ... ...注...原创 2019-05-08 23:01:11 · 89 阅读 · 0 评论 -
Markup封装xml没有缩进?
Markup封装的xml是没有带缩进的,有人对源码进行的改进:https://bbs.csdn.net/topics/390611898https://download.csdn.net/download/linchang_3344/6383087但这个是在多字符集下的,在Unicode字符集下编译不过,我稍修改了一下:1.有几个地方的“”加上_T()2.sscanf(strR...原创 2019-02-13 11:28:47 · 214 阅读 · 0 评论