![](https://img-blog.csdnimg.cn/direct/4d26f88b939442d09a22c1ac06ced091.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
记录平时工作中使用的C++知识点和遇到的各种问题
草上爬
专注技术,热爱分享
展开
-
Windows下动态库的搜索顺序
Windows下动态库的搜索顺序原创 2018-04-11 10:37:30 · 4483 阅读 · 1 评论 -
C++程序员必备的面试技巧
平时可以搜集一些大厂的面试题或笔试题,放在CSDN博客上,没事就翻一下,个人觉得博客是比书更好的信息载体,比如说可以是彩色的图片、可以用动图等。●善于解决问题:在面试中,经常会遇到一些难题或者意想不到的问题,这时候要保持冷静,运用自己的知识和经验,找出解决问题的方法。●注意沟通技巧:在面试中,要注意和面试官的沟通技巧,要能够清晰地表达自己的思路和想法,同时也要认真听取面试官的意见和建议。●展示自己的实际经验:在面试中,可以通过举例说明自己曾经解决过的问题,或者展示自己的项目经验,来证明自己的实力和经验。原创 2024-01-12 00:10:18 · 1798 阅读 · 41 评论 -
Visual Studio设置release版本可调试
Visual Studio设置release版本可调试原创 2017-08-02 12:48:24 · 6259 阅读 · 0 评论 -
C++:invalid conversion from ‘unsigned char *‘ to ‘const char *‘
事实上reinterpret_cast的使用并不局限在上边所说的几项的,任何类型的指针之间都可以互相转换,都不会得到编译错误。上述列出的几项,可能 是Linux下reinterpret_cast使用的限制,也可能是IBM推荐我们使用reinterpret_cast的方式。※从一个指向类函数成员的指针到另一个指向不同类型的函数成员的指针。※从一个指向类数据成员的指针到另一个指向不同类型的数据成员的指针。※从一个指向函数的指针到另一个不同类型的指向函数的指针。※从指针类型到一个足够大的整数类型。原创 2016-04-21 09:24:40 · 26526 阅读 · 1 评论 -
递归函数内部的执行顺序
#include <stdio.h> void fun(int n) { printf("1th - Level: %d Address: %d\n", n, &n); if(n < 3) fun(n+1); printf("2th - Level: %d Address: %d\n", n, &a...原创 2018-05-18 12:39:41 · 20021 阅读 · 4 评论 -
C++之字符串大小写转换
要是好需要把字符串转成大写或小写,方便字符串比较。原创 2018-03-07 20:37:39 · 1898 阅读 · 1 评论 -
C++常用标准算法
算法主要由头文件、、组成。是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、遍历、赋值、修改等等;体积很小,只包括几个在序列上面进行简单数学运算的模板函数;定义了一些模板类。原创 2023-10-24 20:11:07 · 1941 阅读 · 1 评论 -
C++之std::string必知必会
string 类内部封装了很多成员方法例如:查找find,拷贝copy,删除delete 替换replace,插入insertstring管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。原创 2016-11-22 09:46:35 · 4526 阅读 · 1 评论 -
C++ 字符串和数字拼接
C++ 字符串和数字拼接原创 2016-10-12 09:26:26 · 2503 阅读 · 1 评论 -
常用的几种报文校验方式(标准型)
常用的几种报文校验方式(标准型)1.校验和 2.异或校验 3.CRC校验 4.LRC校验 5.补码求和原创 2016-11-29 11:05:57 · 9916 阅读 · 0 评论 -
C++之仿函数与operator()
我们的初衷是想设计一个binary function,使其能做binary function的工作,这看起来并不容易,但是仿函数能解决这个问题。这个函数看起来比前面一个版本更具有一般性,但是他不能满足count_if函数的参数要求:count_if要求的是unary function(仅带有一个参数)作为它的最后一个参数。每当新建一个全局变量,即使是为了coding的便利,我们也要知道我们应该尽可能的少使用全局变量,因为它的cost很高;这段代码看似很不错,实则不符合规范,更重要的是,它不优雅。原创 2017-11-17 16:51:12 · 2696 阅读 · 1 评论 -
C++之复制文件,支持判断路径是否为文件
C++之复制文件,支持判断路径是否为文件原创 2017-11-16 10:07:25 · 17620 阅读 · 1 评论 -
C++ 取代switch的三种方法
上述完全是一个面向过程到面向对象的转变:将每个case分支都作为一个子对象,然后用C++语言的多态性去动态绑定。(2)子类代表了一个case,比必须用type去硬编码的case语句更加具有可读性;值得注意的是函数指针要用typedef定义,否则报错。(3)代码的可读性增强,使得分支的维护性增加;(5)避免了漏写break语句造成的隐蔽错误。(4)面向对象的思想更加符合人看世界的方式;(1)分支的增减只要继续派生即可;原创 2016-10-15 13:03:49 · 14015 阅读 · 6 评论 -
C++之获取GPU(显卡)信息
#include #include #include #include using namespace std;std::string WStringToString(const std::wstring &wstr){ std::string str(wstr.length(), ' '); std::copy(wstr.begin(), wstr.原创 2017-11-24 11:50:17 · 23935 阅读 · 9 评论 -
C++ 获取屏幕显示比例
屏幕默认的显示比例是100%,但是有些用户喜欢调到“中等”或“较大”,这样的话,就可能导致我们开发的应用超出屏幕边界。因此,我们要获取屏幕显示比例,做出相应的处理。Primary display DPI scale factorSimilarly, you can get the pixel density by using the LOGPIXELSX and LOGPIXELSY原创 2017-06-20 09:48:16 · 9567 阅读 · 1 评论 -
C++最简单的写文件
C++最简单的写文件原创 2017-11-11 10:17:24 · 2040 阅读 · 1 评论 -
使用State Threads实现简单的服务器
一次只有一个ST在VP上运行,而VP之间不共享内存,所以任何数据都不需要互斥锁,服务器可以自由使用所有的静态变量和非重入库的函数,这大大简化了编程和调试,并提高性能(例如,对于++和---全局计数是安全的或调用inet_ntoa()不需要使用互斥)。此时,所有进程退出。第一个进程的父进程ID是1,这个进程就是守护进程,下面四个进程都是子进程,它们的父进程都是第一个进程。——给出了编程注意点,包括移植,信号,进程内同步,进程间同步,非网络IO,超时处理,特别谈到进程内同步非常简单,不需要同步资源;原创 2018-03-16 16:06:08 · 6177 阅读 · 1 评论 -
C++获取OpenGL版本号的两种方法
C++获取OpenGL版本号的两种方法原创 2017-06-02 14:42:46 · 11091 阅读 · 1 评论 -
C++之创建Windows系统服务
Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这种服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。原创 2018-03-07 19:32:16 · 4547 阅读 · 0 评论 -
C++实现的任务队列
C++实现的任务队列原创 2017-01-13 16:27:12 · 4020 阅读 · 1 评论 -
C++定义全局变量的两种方式
一、使用extern关键字cglobal.h#ifndef CGLOBAL_H#define CGLOBAL_Hextern int testValue;#endif // CGLOBAL_Hcglobal.cpp#include "cglobal.h"int testValue=1;调用方式#include "cglobal.h"#include <QDebug>qD...原创 2016-04-09 11:49:59 · 48587 阅读 · 8 评论 -
std::string判断字符串前缀和后缀
后缀的判断方式几乎与前缀相同,首先判断目标字符串与当前字符串的长度,目标字符串大于当前字符串则返回错误,然后判断目标字符串在当前字符串最后一次出现的位置。find函数的作用于rfind类似,但是是正向查找模式串str出现的第一个位置,pos代表从0开始到pos位置结束中正向查找,并且也是正向匹配。rfind函数的作用是查找模式串str在当前字符串中最后一次出现的位置,pos代表从第pos个位置开始逆向查找,但是匹配是正向匹配的。代码的判断使用了rfind函数,该函数的作用将在后面具体解释。原创 2016-11-29 09:53:31 · 7348 阅读 · 0 评论 -
哈希表(Hash Table)
理解Hash 哈希表(hash table)是从一个集合A到另一个集合B的映射(mapping)。 映射是一种对应关系,而且集合A的某个元素只能对应集合B中的一个元素。但反过来,集合B中的一个元素可能对应多个集合A中的元素。如果B中的元素只能对应A中的一个元素,这样的映射被称为一一映射。这样的对应关系在现实生活中很常见,比如: A -> B原创 2017-12-12 15:49:24 · 5033 阅读 · 0 评论 -
C++实现的高精度计时器(精确到纳秒)
在调试程序的时候,有时候需要知道程序语句执行时间的耗时。特别是比较算法性能的时候,对耗时的精度要求较高。chrono是C++ 11中的时间库,它提供了跨平台的高精度时钟解决方案,精确到纳秒级。原创 2017-11-16 16:15:10 · 5591 阅读 · 0 评论 -
学习C++最好的四个网站
学习C++最好的四个网站:cppreference、LearnCpp、cplusplus、TutorialsPoint原创 2017-11-28 14:03:27 · 9158 阅读 · 2 评论 -
C++之监控文件是否被修改
软件开发过程中经常会用到配置文件,某些应用场景要求在软件运行时动态修改配置文件,此时就需要监控配置文件是否被修改,如果修改了,重新加载。这里config.txt和可执行文件同一目录,每次修改config.txt,就会打印File changed。原创 2023-02-04 14:11:22 · 3175 阅读 · 3 评论 -
C 延时函数
#include void delay(int ms){ clock_t start = clock(); while(clock() - start < ms);}delay(500); 延时500毫秒原创 2016-10-14 16:13:30 · 3216 阅读 · 0 评论 -
C++写文件时主动刷新磁盘文件大小
C++写文件时主动刷新磁盘文件大小原创 2023-12-12 21:48:52 · 1687 阅读 · 0 评论 -
C++之打开控制台窗口并输出我的爱
C++之打开控制台窗口并输出,freopen函数用来替换一个流,或者说重新分配文件指针,以实现重定向。可重定向的流有:标准输入流、标准输出流或者标准错误流。原创 2021-12-14 08:56:07 · 3138 阅读 · 0 评论 -
VC++ 使用预编译头
一、使用默认的预编译头 要使用预编译头,我们必须指定一个头文件,这个头文件包含我们不会经常改变的代码和其他的头文件,然后我们用这个头文件来生成一个预编译头文件(.pch文件),想必大家都知道 StdAfx.h这个文件。很多人都认为这是VC提供的一个“系统级别”的,编译器带的一个头文件。其实不是的,这个文件可以是任何名字的。我们来考察一个典型的由AppWizard生成的MFC Dia原创 2017-07-16 17:10:28 · 4025 阅读 · 0 评论 -
C++之vsnprintf
vsnprintf的使用方法原创 2017-12-30 19:34:51 · 8726 阅读 · 1 评论 -
C++之重定向stdout到内存
C++之重定向stdout到内存原创 2023-10-30 21:55:30 · 1613 阅读 · 0 评论 -
目标文件和可执行文件的存储格式
目标文件和可执行文件里面都有什么。编译器编译源代码(由于汇编比较简单,这里汇编包含在编译中)后生成的文件叫做目标文件(Object File),例如 Visual Studio 下的.obj,或者 GCC 下的.o。原创 2016-10-21 09:27:34 · 3421 阅读 · 1 评论 -
C++之std::vector元素去重
这种方法是结合sort和unique函数将相邻且重复的元素放到vector的尾部,然后返回指向第一个重复元素的迭代器再用erase函数擦除从这个元素到最后元素的所有的元素。这种方法是简单的利用set的特性,C++中的std::set是基于红黑树的平衡二叉树的数据结构实现的一种容器,因为其中所包含的元素的值是唯一的,因此主要用于去重和排序。原创 2018-04-17 11:26:18 · 12878 阅读 · 1 评论 -
C++之相对路径转绝对路径
有时候需要把相对路径转换成绝对路径,然后判断路径里是否包含“目标路径”,然后进行下一步操作,比如说某个配置文件需要特殊处理,而且这个配置文件的路径是不变的。原创 2016-10-13 10:51:09 · 2658 阅读 · 1 评论 -
C++使用回调函数的两种方式
C++之使用回调函数的两种方式:1.回调函数,2.std::bind和std::function原创 2023-12-15 18:38:10 · 1763 阅读 · 0 评论 -
C++之最简单的TCP客户端和服务器(Windows版)
这里做个备份,毕竟在对第三方网络库或者自己开发网络库做压测时,需要有比较基准,这个基准必须是最简陋的乞丐版,即只调用系统API实现的最简单的TCP客户端和服务器。例子给出的是最简单的Ping-Pong测试,很形象了,像打乒乓球一样将数据丢来丢去。原创 2017-11-23 10:03:52 · 3194 阅读 · 1 评论 -
windows命名管道
一.windows管道简介管道(Pipe)的定义:A pipe is a section of shared memory that processes use for communication. The process that creates a pipe is the pipe server. A process that connects to a pipe is a pipe原创 2016-11-17 14:36:27 · 13872 阅读 · 2 评论 -
C++ 实现线程安全的map
STL容器不是线程安全的。比如对于vector,即使写方(生产者)是单线程写入,但是并发读的时候,由于潜在的内存重新申请和对象复制问题,会导致读方(消费者)的迭代器失效。实际表现也就是招致了core dump。另外一种情况,如果是多个写方,并发的push_back(),也会导致core dump。但可以通过固定vector的大小(调用resize())避免动态扩容(无push_back)来做到lock-free。原创 2017-11-17 09:20:10 · 6597 阅读 · 2 评论 -
C++之ofstream::flush与ofstream::close
一.缓冲区知识1.什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。2.为什么要引入缓冲区我们为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中原创 2017-12-28 12:44:20 · 29035 阅读 · 0 评论