![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 79
jx347638458
id防守反击看电视反抗精神的胡椒粉看电视
展开
-
memset用法详解
memset用法详解1。void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。2。例子#includevoid main(){char *s="Golden Global View";clrscr();memset(s,'G',6);printf("%s",转载 2017-07-30 22:04:02 · 448 阅读 · 0 评论 -
1 教科书里的单例模式
1 教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。 上代码: 123456转载 2017-09-04 17:03:25 · 250 阅读 · 0 评论 -
尝试在C++里实现 Java 的 synchronized 关键字
尝试在C++里实现 Java 的 synchronized 关键字 话说Java里有个很强大的关键字叫synchronized,可以方便的实现线程同步。今天异想天开,尝试在C++里模拟一个类似的。 最近在学习C++的STL,看见智能指针这章节时,无不感叹利用语言的丰富特征,来各种实现各种巧妙的构思。最经典的莫过于使用栈对象构造/析构函数,来维护局部资源的初始化和释放转载 2017-09-04 17:20:19 · 530 阅读 · 2 评论 -
Qt中QThread 互斥,事件,临界区,信号量
在gemfield的《从pthread到QThread》一文中我们了解了线程的基本使用,但是有一大部分的内容当时说要放到这片文章里讨论,那就是线程的同步问题。关于这个问题,gemfield在《从进 程到线程》中有一个比喻,有必要重新放在下面温习下:*******************************最后用一个比喻来总结下:1、一个进程就好比一个房子里有一个人;2、cl转载 2017-09-05 10:21:56 · 5328 阅读 · 0 评论 -
排序算法3
1、序言这是《漫谈经典排序算法系列》第三篇,先解析了冒泡排序,然后引出快速排序,给出了快速排序的两种实现版本。各种排序算法的解析请参考如下:《漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析》《漫谈经典排序算法:二、各种插入排序解析及性能比较》《漫谈经典排序算法:三、冒泡排序 && 快速排序》《漫谈经典排序算法:四、归并排序》《漫谈转载 2017-08-27 13:25:48 · 227 阅读 · 0 评论 -
排序算法4
1、序言这是《漫谈经典排序算法系列》第四篇,解析了归并排序。 各种排序算法的解析请参考如下:《漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析》《漫谈经典排序算法:二、各种插入排序解析及性能比较》《漫谈经典排序算法:三、冒泡排序 && 快速排序》《漫谈经典排序算法:四、归并排序》《漫谈经典排序算法:五、线性时间排序(计数、基数、桶排转载 2017-08-27 13:26:52 · 209 阅读 · 0 评论 -
排序算法5
1、序言这是《漫谈经典排序算法系列》第五篇,给出了三种线性时间排序,分别是计数排序、基数排序、桶排序。各种排序算法的解析请参考如下: 《漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析》《漫谈经典排序算法:二、各种插入排序解析及性能比较》《漫谈经典排序算法:三、冒泡排序 && 快速排序》《漫谈经典排序算法:四、归并排序》《漫转载 2017-08-27 13:31:46 · 247 阅读 · 0 评论 -
基数排序
编程论到极致,核心非代码,即思想。所以,真正的编程高手同时是思想独到及富有智慧(注意与聪明区别)的人。每一个算法都是一种智慧的凝聚或萃取,值得我们学习从而提高自己,开拓思路,更重要的是转换思维角度。其实,我们大多数人都活在“默认状态”下。没有发觉自己的独特可设置选项-----思想。言归正传(呵呵!恢复默认状态),以下学习基数排序。【1】基数排序以前研转载 2017-08-28 08:58:31 · 238 阅读 · 0 评论 -
C++二义性
版权声明:本文为博主原创文章,未经博主允许不得转载。 二义性问题1.在继承时,基类之间、或基类与派生类之间发生成员同名时,将出现对成员访问的不确定性——同名二义性。2.当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生另一种不确定性——路径二义性。同名二义性同名隐藏规则——解决同名二义的方法转载 2017-08-29 13:10:21 · 603 阅读 · 0 评论 -
C++中的 多线程
有很多时候,我们希望可以在C++类里面对那些比较耗时的函数使用多线程技术,但是熟悉C++对象语法的人应该知道,C++类的成员函数的函数指针不能直接做为参数传到pthread_create,主要因为是C++成员函数指针带有类命名空间,同时成员函数末尾是会被C++编译器加上可以接收对象地址的this指针参数。因此需要将成员函数做一定的转化,将其转化为不被编译器加上this指针,而由我们自己来为该函数维转载 2017-08-30 08:03:48 · 489 阅读 · 0 评论 -
二叉查找树
二叉查找树(一)之 图文解析 和 C语言的实现 概要 本章先对二叉树的相关理论知识进行介绍,然后给出C语言的详细实现。关于二叉树的学习,需要说明的是:它并不难,不仅不难,而且它非常简单。初次接触树的时候,我也觉得它似乎很难;而之所产生这种感觉主要是由于二叉树有一大堆陌生的概念、性质等内容。而当我真正的实现了二叉树再回过头来看它的相关概念和性质的时候,觉得原来它是转载 2017-08-31 21:06:59 · 298 阅读 · 0 评论 -
二叉查找树(二)之 C++的实现
二叉查找树(二)之 C++的实现 概要上一章介绍了"二叉查找树的相关理论知识,并通过C语言实现了二叉查找树"。这一章给出二叉查找树的C++版本。这里不再对树的相关概念进行介绍,若遇到不明白的概念,可以在上一章查找。目录1. 二叉树查找树2. 二叉查找树的C++实现3. 二叉查找树的C++实现(完整源码)4. 二叉查找树的C++测试程序转载请注明出处:转载 2017-08-31 21:08:13 · 393 阅读 · 0 评论 -
归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plain copy转载 2017-08-31 22:22:11 · 183 阅读 · 0 评论 -
线程同步
线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。一、互斥锁(mutex)通过锁机制实现线程间的同步。初始化锁。在Linux下,线程的互斥量数据类型是pthread_mutex_t。在使用前,要对它进行初始化。静态分配:pthread_mutex_t mutex = PTHR转载 2017-09-01 21:44:08 · 154 阅读 · 0 评论 -
C++虚函数及虚函数表解析
引言C++面向对象语言的一大特性就是抽象,在程序设计上的体现就是鼓励面向接口编程,而不要面向具体实现编程。这里所说的抽象和接口与C++的多态性密切相关。C++的多态分为静态多态(编译时多态)和动态多态(运行时多态)两大类。静态多态通过重载、模板来实现;动态多态就是通过本文的主角虚函数来体现的。虚函数是C++语言一个非常重要的特性,不同编译器对此特性的实现机制也略有差别,虽然具体实现细节由编原创 2017-10-19 08:53:23 · 236 阅读 · 0 评论 -
线程池
1.线程池基本原理 在传统服务器结构中, 常是 有一个总的 监听线程监听有没有新的用户连接服务器, 每当有一个新的 用户进入, 服务器就开启一个新的线程用户处理这 个用户的数据包。这个线程只服务于这个用户 , 当 用户与服务器端关闭连接以后, 服务器端销毁这个线程。然而频繁地开辟与销毁线程极大地占用了系统的资源。而且在大量用户的情况下, 系统为了开辟和销毁线程将浪费大量的时间和资源。线程转载 2017-10-19 20:26:31 · 170 阅读 · 0 评论 -
strcpy和memcpy
strcpy和memcpy都是标准c库函数,它们的特点:strcpy提供了字符串的复制,strcpy只用于字符串的复制,不仅复制字符串内容外,还会复制字符串的结束符。strcpy的函数原型是: char* strcpy(char* dest, const char* src);[cpp] view plain copychar转载 2017-08-15 20:01:35 · 367 阅读 · 0 评论 -
内存管理
计算存储的层次结构:当前技术没有能够提供这样的存储器,因此大部分的计算机都有一个存储器层次结构,即少量的非常快速、昂贵、易变的高速缓存(cache);若干兆字节的中等速度、中等价格、易变的主存储器(RAM);数百兆或数千兆的低速、廉价、不易变的磁盘。这些资源的合理使用与否直接关系着系统的效率。 1. 内存管理方法转载 2017-08-14 19:47:09 · 362 阅读 · 0 评论 -
C++中的类模板详细讲述
一、类模板定义及实例化1. 定义一个类模板:1 templateclass 模板参数表>2 3 class 类名{4 5 // 类定义......6 7 }; 其中,template 是声明类模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个,可以是类型参数 ,也可以是非类型参数。类型参数由关键字class或typename转载 2017-08-07 10:19:32 · 318 阅读 · 0 评论 -
TCP/IP四层模型
TCP/IP四层模型TCP/IP参考模型 ISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图。 图2-1 TCP/IP参考模型 2.1 TCP/IP参考模型的层次结构 TCP/IP协转载 2017-07-30 22:05:36 · 349 阅读 · 0 评论 -
常见的C++面试题
我自己总结过一些常见的C++面试题,那个是基于一个同学的腾讯面经所问问题,再加上知识点扩展进行了总结,这个是网上之前就有的版本,比较基础,有些题目总结一下,不能忘了基础:1.求下面函数的返回值( 微软)int func(x) { int countx =0; while(x) { countx ++;转载 2017-07-31 14:53:13 · 212 阅读 · 0 评论 -
搭载web服务器
代码下载地址:http://download.csdn.net/detail/u010959074/9572149以下是项目介绍。学习提示:1. 在“桌面环境”中动手练习,若环境不流畅可选择WebIDE或字符界面。2. 在教程下方“课程问答”中提出问题,或“共享桌面”寻求远程帮助。3. 在教程下方“实验报告”中完成作业,记录心得。公开报告可以获得大家点评。转载 2017-08-01 14:23:17 · 626 阅读 · 0 评论 -
Linux C++ 实现简易小型的Web服务器httpd
在这个简易版的Web服务器中,实现了GET静态数据,以及动态数据。------------------------------------------------------------------------------------------------2017.04.29更新增加POST方法,修改线程池,将任务队列的list 改成queue,改进线程池,使线程池能正确转载 2017-08-01 14:53:38 · 2610 阅读 · 0 评论 -
C/C++中二维数组和指针关系分析
C++转载 2017-07-24 17:24:02 · 549 阅读 · 0 评论 -
计算机的原码, 反码和补码
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式转载 2017-08-09 08:49:59 · 207 阅读 · 0 评论 -
SQL中INNER、LEFT、RIGHT JOIN的区别和用法详解
相信很多人在刚开始使用数据库的INNER JOIN、LEFT JOIN和RIGHT JOIN时,都不太能明确区分和正确使用这三种JOIN操作,本文通过一个简单的例子通俗易懂的讲解这三者的区别,希望对大家能带来帮助。首先,我们创建示例数据库和表。同时也要明确一个概念:A INNER/LEFT/RIGHT JOIN B操作中,A表被称为左表,B表被称为右表。创建示例数据库school,转载 2017-07-25 15:32:03 · 3725 阅读 · 0 评论 -
数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
概要线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列。本章先介绍线性表的几个基本组成部分:数组、单向链表、双向链表;随后给出双向链表的C、C++和Java三种语言的实现。内容包括:数组单向链表双向链表 1. C实现双链表 2. C++实现双链表 3. Java实现双链表转载请注明出处:http://w转载 2017-08-10 09:12:28 · 512 阅读 · 0 评论 -
C++ 单链表基本操作分析与实现 链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结
C++ 单链表基本操作分析与实现链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。 创建头节点转载 2017-08-10 15:06:39 · 4152 阅读 · 0 评论 -
TCP/IP协议栈的基本工作原理
TCP/IP是互联网的核心协议,也是大多数网络应用的核心协议。就前面一段时间面试中问到的TCP/IP问题,这里给出一个简单的小结。 TCP由RFC793、RFC1122、RFC1323、RFC2001、RFC2018以及RFC2581定义。 (1) TCP概述a. TCP提供的是面向连接的全双工服务。TCP所有的数据会匹配到由源地址,目的地址,源端口转载 2017-08-10 16:19:56 · 1810 阅读 · 0 评论 -
快速排序详解
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速转载 2017-08-19 09:53:40 · 194 阅读 · 0 评论 -
今天看到的一个有趣面试题:return *this和return this有什么区别?
别跟我说, return *this返回当前对象, return this返回当前对象的地址(指向当前对象的指针)。 正确答案为:return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&, 则是本身 )。return this返回当前对象的地址(指向当前对象的指针), 下面我们来看看程序吧:[cpp] view转载 2017-08-05 21:56:48 · 215 阅读 · 0 评论 -
排序算法
最近看排序算法的书籍,记录下自己的心得和总结。关于几种常见排序的原理和实现。(快速排序借了别人的步骤描述,可以很清晰的理解每一趟怎么跑的)首先说下稳定排序和非稳定排序,简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就说这种排序方法是稳定的。反之,就是非稳定的。 几个基本常见的排序,插入排序(包括直接插入,希尔插入,折半插入等),交转载 2017-08-20 19:42:11 · 191 阅读 · 0 评论 -
C++ STL容器之 map
C++ STL容器之 mapmap 是一种有序无重复的关联容器。关联容器与顺序容器不同,他们的元素是按照关键字来保存和访问的,而顺序元素是按照它们在容器中的位置保存和访问的。map保存的是一种 key - value 的pair对象,其中 key 是关键字,value 是关键字对应的值。通过 key找到对应的 value。map中按照 key的大小升序排列pair对象。转载 2017-08-14 15:13:05 · 283 阅读 · 0 评论 -
经典算法题1:找出数组中只出现一次的数字,其它数字都出现了两次
题目:一个整型数组里除了一个数字之外,其它的数字都出现了两次。请写程序找出这个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:由于题目要求时间复杂度为O(n),所以先排序然后比较相邻数字是否相同的思路被排除。 空间复杂度是O(1),辅助空间被限制,所以hash表的思路也被排除。 那么这个题的突破口在哪里呢?注转载 2017-10-20 20:00:10 · 2373 阅读 · 0 评论