
C/C++
文章平均质量分 85
猫猫猫猫猫大人
工程师 -> 架构师 -> 全栈工程师 -> 全栈架构师
展开
-
C++突击面试
C++突击面试转载 2022-05-07 21:39:47 · 2769 阅读 · 0 评论 -
C++类内存分布
书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来:先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 reportSingleClassLayoutXXX(XXX为类名),则只会打出指定类XXX的.转载 2022-05-07 17:08:35 · 375 阅读 · 0 评论 -
C++ 11 bind原理图释
(原文:http://blog.think-async.com/2010/04/bind-illustrated.html)本文解释了bind是如何工作的。为了清晰,我对图中的语法作了一些简化(例如,省略函数调用操作符的参数类型),并且简化了bind的实现.1. bind可以用来将用户提供的需要一个参数的函数转换成不需要参数的函数对象。绑定的值(在这个例子中是123)存储在函数对象内并且会被自动传递给用户指定的函数:2. 参数绑定也可以用于将类成员函数转换成零参数的函数对...转载 2021-03-01 14:29:41 · 227 阅读 · 0 评论 -
C++11 并发指南系列
本系列文章主要介绍 C++11 并发编程,计划分为 9 章介绍 C++11 的并发和多线程编程,分别如下:C++11 并发指南一(C++11 多线程初探)(本章计划 1-2 篇,已完成 1 篇)C++11 并发指南二(std::thread 详解)(本章计划 1-2 篇,已完成 1 篇)C++11 并发指南三(std::mutex 详解)(本章计划 1-2 篇,已完成 2 篇)C+...转载 2020-04-23 11:06:28 · 226 阅读 · 0 评论 -
C++静态成员函数访问非静态成员的几种方法
大家都知道C++中类的成员函数默认都提供了this指针,在非静态成员函数中当你调用函数的时候,编译器都会“自动”帮你把这个this指针加到函数形参里去。当然在C++灵活性下面,类还具备了静态成员和静态函数,即class A{public: static void test() { m_staticA += 1; }private: sta...转载 2020-04-23 11:05:26 · 562 阅读 · 0 评论 -
设计模式C++实现(17)——命令模式
定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。类型:行为类模式类图:命令模式的结构 顾名思义,命令模式就是对命令的封装,首先来看一下命令模式类图中的基本结构:Command类:是一个抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute方法用来执行命令。C转载 2017-05-19 18:19:42 · 727 阅读 · 0 评论 -
Json解析(C++)——jsoncpp
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似,本文主要对VS2008中使用Jsoncpp解析json的方法做一下记录。 Jsoncpp是个跨平台的开源库,下载地址:http://sourceforge.net/projects/jsoncpp/。jsoncpp 使用详解jsoncpp 主要包含三种类型的 class:Value、Read转载 2017-04-06 10:23:04 · 1046 阅读 · 0 评论 -
c/c++调用libcurl库发送http请求的两种基本用法
libcurl主要提供了两种发送http请求的方式,分别是Easy interface方式和multi interface方式,前者是采用阻塞的方式发送单条数据,后者采用组合的方式可以一次性发送多条数据一、Easy interfacelibcurl的easy interface是最基本的用法,简要流程为:1、在主线程中调用curl_global_init(CURL_GLOBAL_A转载 2017-02-09 15:22:39 · 6369 阅读 · 0 评论 -
setsockopt() 函数
功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。转载 2017-02-07 17:24:57 · 458 阅读 · 0 评论 -
C++ STL标准入门汇总
学无止境!!!第一部分:(参考百度百科) 一、STL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。转载 2017-02-07 16:06:08 · 741 阅读 · 0 评论 -
tchar.h及TCHAR数据类型介绍
并不是所有的Windows操作系统都支持UNICODE编码的API(例如早期的Windows98), 这就造成了两种结果:某些版本的Windows应该应用wchar_t来保存字符, 某些平台的Windows应该使用char类型来保存字符, 显然这两种类型的变量是无法混用的。 为了解决该问题, Windows从一开始设计Windows时, 就提供了一整套方案, 对于支持ASCII字符集转载 2017-07-13 22:53:26 · 4047 阅读 · 0 评论 -
C/C++学习之basic_string
#include template typename CharT, typename Traits = std::char_traits CharT >, typename Allocator = std::allocator CharT >> class basic_string;类模板 basic_string 提供了字符序列如何操作和存储的泛转载 2017-07-13 23:28:11 · 2489 阅读 · 0 评论 -
C++使用libcurl做HttpClient
当使用C++做HTTP客户端时,目前通用的做法就是使用libcurl。其官方网站的地址是http://curl.haxx.se/,该网站主要提供了Curl和libcurl。Curl是命令行工具,用于完成FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP的命令的请求及接收回馈。libcurl提供给开发者,用于使用C++跨平台的开发各种转载 2017-02-09 15:32:01 · 8761 阅读 · 2 评论 -
C++11 常用语法
1 新类型C++ 11新增了long long和unsigned long long,以支持64bit宽度; 新增char16_t和char32_t以支持16位和32位字符表示; 增加了“原始”字符串。 2 初始化C++ 11扩展了大括号{}的适用范围,既可以用于基本类型,也可以用于自定义类型:int x = {5};couble y{3.5};shor转载 2017-07-20 11:16:45 · 617 阅读 · 0 评论 -
TCP粘包问题分析和解决
这两天看csdn有一些关于socket粘包,socket缓冲区设置的问题,发现自己不是很清楚,所以查资料了解记录一下: 一 .两个简单概念长连接与短连接:1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方转载 2017-09-07 13:32:10 · 594 阅读 · 0 评论 -
Linux生成core文件及gdb调试
Linux下的C程序常常会因为内存访问错误等原因造成segment fault(段错误),此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进行分析,还原系统发生段错误时刻的堆栈情况。这对于我们发现程序bug很有帮助。使用ulimit -a可以查看系统core文件的大小限制;使用ulimit -c [kbytes]可以设置系统允许生成的转载 2017-09-12 17:16:10 · 2896 阅读 · 0 评论 -
windows下运行exe CreateProcess 和 ShellExecute
一、CreateProcess 说明: WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。 函数原型:BOOL CreateProcess( LPCTSTR lpApplicationName, // 指向一个NULL结尾的、用来指定可执行模块的宽字节字符串 LPTSTR lpCommandLin原创 2017-10-31 18:00:19 · 3594 阅读 · 0 评论 -
C++ STL基本容器的使用
C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与vector类似,但是对首元素提供插入和删除的双向支持。关联容器主要有map和set。map是key-value形式,set是单值。map和set只能存放唯一的key,multimap和multise转载 2017-02-07 14:14:37 · 417 阅读 · 0 评论 -
关于setsid() 函数的说明
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用 的进 程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。 比如,作业规划进程crond,打印进程lpd等。守护进程的编程本身并不复杂,复杂的是各种版转载 2016-11-17 18:32:16 · 596 阅读 · 0 评论 -
在C语言中,double、long、unsigned、int、char类型数据所占字节数
和机器字长及编译器有关系:所以,int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的): 1 sizeof(short int)<=sizeof(int) 2 sizeof(int)<=sizeof(long int) 3 short int至少应为16位(2字节) 4 long int至少应为32位。 unsigned 是转载 2016-07-28 12:49:42 · 587 阅读 · 0 评论 -
struct stat结构体简介
在使用这个结构体和方法时,需要引入:struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结构。可以有两种方法来获取一个文件的属性:1、通过路径:int stat(const char *path, struct stat *struct_stat);int lstat(const char *path,struct stat *st原创 2015-12-21 11:07:42 · 484 阅读 · 0 评论 -
code 提取文件夹下所有文件的名字(包括子文件夹)
#include#include#include#include#include#include#include#includeusing namespace std;int readFileList(char *basePath){ DIR *dir; struct dirent *ptr;原创 2015-12-22 12:38:43 · 918 阅读 · 2 评论 -
code 提取字符串中的数字
#include#include#includeint main(){ char ch[] = "SE:FR:ATSI38.2MHz"; char delim[64] = {0}; char temp[64]; float freq; //sscanf(ch,"%s%s",delim,temp)原创 2015-12-22 12:44:37 · 666 阅读 · 0 评论 -
code 文件的保存、读取
#include #include #include #include #include #include "FRSAPI.h"//save filevoid save_file(string path_m,string path_n,float score){ FILE *fp = NULL; char word[1000];原创 2015-12-22 12:46:10 · 1404 阅读 · 0 评论 -
C++ string详解
序:C++ 语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用C或者C++,为什么?原因众多,其中之一就是C/C++的文本处理功能太麻烦,用起来很不方便。以前没有接触过其他语言时,每当别人这么说,我总是不屑一顾,认为他们根本就没有领会C++的精华,或者不太懂C++,现在我接触 perl, php, 和Shell脚本以后,开始理解了以前为什么有人说C++文本处理不方便了。转载 2015-12-22 15:42:13 · 694 阅读 · 0 评论 -
多线程参数传递
#include#includestruct val{ int num1; int num2;};//send a int to argvoid *text(void *arg){ int *p = (int *)arg; printf("arg is %d\n",*p); pthread_exit(NULL);转载 2016-01-14 17:41:05 · 505 阅读 · 0 评论 -
QTableView 的使用
QTableView常用于实现数据的表格显示。下面我们如何按步骤实现学生信息表格:一 添加表头 //准备数据模型 QStandardItemModel *student_model = new QStandardItemModel(); student_model->setHorizontalHeaderItem(0, new QStandardItem(QObj原创 2016-03-21 11:14:16 · 1424 阅读 · 1 评论 -
QT GUI界面假死的处理
在GUI程序中,主线程也叫GUI线程,因为它是唯一被允许执行GUI相关操作的线程。对于一些耗时的操作,如果放在主线程中,就是出现界面无法响应的问题。这种问题的解决一种方式是,把这些耗时操作放到次线程中,还有一种比较简单的方法:在处理耗时操作中频繁调用QApplication::processEvents()。这个函数告诉Qt去处理那些还没有被处理的各类事件,然后再把控制权返还给调用者。原创 2016-03-09 19:14:32 · 14106 阅读 · 0 评论 -
Qt中图像的显示与基本操作
Qt可显示基本的图像类型,利用QImage、QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放、旋转)。1. Qt可显示的图像类型参考Qt的帮助文档,可支持的类型,即可以直接读取并显示的格式有BMP、GIF、JPG、JPEG、PNG、TIFF、PBM、PGM、PPM、XBM、XPM。2. Qt用如何显示图像通常用QLabel显示图像,QLabel类有s转载 2016-03-10 19:22:38 · 403 阅读 · 0 评论 -
linux下使用xml
程序中用了libxml的库,但是不知道库函数具体如何是用,那么下面的参考手册能解决你的大部分问题,简明易懂,程序表达效果。http://www.xmlsoft.org/tutorial/index.html下面再给出国内的一资料,写得也很不错。使用简介数据类型:xmlChar 替代char,使用UTF-8编码的一字节字符串。如果你的数据使用其它编码,它必须被转换到UTF转载 2016-10-10 11:26:01 · 5715 阅读 · 0 评论 -
xml文件的解析
1.Libxml2中的数据类型和函数一个函数库中可能有几百种数据类型以及几千个函数,但是记住大师的话,90%的功能都是由30%的内容提供的。对于libxml2,我认为搞懂以下的数据类型和函数就足够了。1.1 内部字符类型xmlCharxmlChar是Libxml2中的字符类型,库中所有字符、字符串都是基于这个数据类型。事实上它的定义是:xmlstring.htyped转载 2016-10-10 11:51:07 · 4609 阅读 · 0 评论 -
使用XPATH查找xml文档节点
简而言之,XPATH之于xml,好比SQL之于关系数据库。要在一个复杂的xml文档中查找所需的信息,XPATH简直是必不可少的工具。XPATH语法简单易学,并且有一个很好的官方教程,见http://www.zvon.org/xxl/XPathTutorial/Output_chi/introduction.html。这个站点的XML各种教程齐全,并且有包括中文在内的各国语言版本,真是让我喜欢到非常转载 2016-10-10 14:35:38 · 1739 阅读 · 0 评论 -
采用dlopen、dlsym、dlclose加载动态链接库
1、前言 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,需要进一步学习,后续继续补充。如何将程序设计为插件形式,挖掘出主题和业务之间的关系,需要进一步去转载 2016-10-11 10:08:01 · 481 阅读 · 0 评论 -
哈希表算法实现
环境:主机:WINXP开发环境:MINGW说明:本程序建立的哈希表示意图:哈希函数为对哈希表长取余源代码:[cpp] view plain copy /********************************************************************* *转载 2016-10-11 11:24:23 · 1576 阅读 · 0 评论 -
哈希表及其常用算法(代码实现)
整理了一下Hash表相关内容,如下:Hash 表是使用 O(1) 时间进行数据的插入删除和查找,但是 hash 表不保证表中数据的有序性,这样在 hash 表中查找最大数据或者最小数据的时间是 O(N) 。1 寻址和 hash 函数 理想状态下 hash 足够大,每一数据保存在一个 hash 存储单元内,这样对于插入删除和查找某一个数据就可以转载 2016-11-03 19:28:19 · 1051 阅读 · 0 评论 -
va_list 、vsnprintf 原理及用法
VA_LIST 是在C语言中解决变参问题的一组宏,变参问题是指参数的个数不定,可以是传入一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个参数并没有实际的名称与之相对应,用起来是很灵活。下面是 里面重要的几个宏定义如下:typedef char* va_list;void va_start ( va_list ap, prev_param );原创 2016-09-28 10:42:32 · 4570 阅读 · 0 评论 -
C语言获取时间的集中方法
C语言中如何获取时间?精度如何? 1 使用time_t time( time_t * timer ) 精确到秒2 使用clock_t clock() 得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒3 计算时间差使用double difftime( time_t timer1, time_t timer0 )4 使用DWORD GetTickCount()原创 2016-01-04 16:45:57 · 591 阅读 · 1 评论