C++
fanx021
这个作者很懒,什么都没留下…
展开
-
C++单例模式应用
声明:本文转自https://www.jb51.net/article/55969.htm,如有侵权,请联系我删除定义:一个类有且仅有一个实例,并且提供一个访问它的全局访问点。要点:1、类只能有一个实例;2、必须自行创建此实例;3、必须自行向整个系统提供此实例。实现一:单例模式结构代码singleton.h文件代码如下:#ifndef _SINGLETON_H_#define ...转载 2019-03-24 22:36:41 · 1370 阅读 · 0 评论 -
C++ struct构造函数
下面看看一道关于C++中笔试题:#include <stdio.h>struct test{ test(int n){ printf("test(%d)\n",n); } test(){ printf("test()\n"); } void Fun(){ printf("Fun()...转载 2018-06-17 09:33:47 · 9796 阅读 · 0 评论 -
C++内存泄漏及检测工具详解
首先我们需要知道程序有没有内存泄露,然后定位到底是哪行代码出现内存泄露了,这样才能将其修复。最简单的方法当然是借助于专业的检测工具,比较有名如BoundsCheck,功能非常强大,相信做C++开发的人都离不开它。此外就是不使用任何工具,而是自己来实现对内存泄露的监控,分如下两种情况:一. 在 MFC 中检测内存泄漏假如是用MFC的程序的话,很简单。默认的就有内存泄露检测的功能。我们用VS2005生...转载 2018-06-09 09:54:23 · 1960 阅读 · 0 评论 -
C++三种内存对象比较
C++将内存划分为三个逻辑区域:堆、栈和静态存储区。既然如此,我称位于它们之中的对象分别为堆对象,栈对象以及静态对象。三种内存对象的比较 栈对象的优势是在适当的时候自动生成,又在适当的时候自动销毁,不需要程序员操心;而且栈对象的创建速度一般较堆对象快,因为分配堆对象时,会调用operator new操作,operator new会采用某种内存空间搜索算法,而该搜索过程可能是很费时间的,产生栈对象则...转载 2018-06-09 09:51:22 · 1829 阅读 · 0 评论 -
全面剖析树的各类遍历方法
面试中常考到树的前序,中序,后序和层序遍历,这篇博文就带你深度剖析一下二叉树的各类遍历算法的实现二叉树的遍历主要有四种,前序、中序、后序和层序遍历的实现方式主要是:递归和非递归递归遍历的实现非常容易,非递归的实现需要用到栈,难度系数要高一点。一、二叉树节点的定义二叉树的每个节点由节点值、左子树和右子树组成。class TreeNode{public: int val; TreeNode* left...转载 2018-06-09 08:50:03 · 1522 阅读 · 0 评论 -
带你深入理解STL之RBTree
最近一直忙于校招的笔试,STL的深入理解系列也耽搁了好几天,再加上!红黑树真的是超级超级难理解,超级超级复杂,参考了好多博客上的大神的理解才稍微明白一点,勉强入个门,下面请以一个菜鸟的角度跟着我一起学习STL的红黑树吧。概述红黑树是平衡二叉搜索树的一种,其通过特定的操作来保持二叉查找树的平衡。首先,我们来复习一下二叉查找树的知识,建议如果对二叉查找树不理解的先去搜一下相关博客来了解一下。二叉搜索树...转载 2018-06-09 08:49:12 · 619 阅读 · 0 评论 -
带你深入理解STL之Stack和Queue
上一篇博客,带你深入理解STL之Deque容器中详细介绍了deque容器的源码实现方式。结合前面介绍的两个容器vector和list,在使用的过程中,我们确实要知道在什么情况下需要选择恰当的容器来满足需求和提升效率。一般选择的准则有如下几条:如果需要随机访问一个容器,vector比list要好如果需要经常插入和删除操作的话,list比vector要好如果既要随机存取,又要关心两端数据的插入和删除,...转载 2018-06-09 08:47:56 · 165 阅读 · 0 评论 -
带你深入理解STL之Deque容器
在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点。vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操作符,节省空间。但是其在分配的内存不够的情况下,需要对容器整体进行重新分配、拷贝和释放等操作,而且在vector中间插入或删除元素效率很低。而list是以节点形式来存放数据,使用的是非连续的内存空间来...转载 2018-06-09 08:45:22 · 421 阅读 · 0 评论 -
带你深入理解STL之List容器
上一篇博客中介绍的vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,很好的支持了随机存取,但由于是连续空间,所以在中间进行插入、删除等操作时都造成了内存块的拷贝和移动,另外在内存空间不足时还需要重新申请一块大内存来进行内存的拷贝。为了克服这些缺陷,STL定义了另一种容器List,它对于数据插入和删除的时间复杂度均为O(1),而且再内存方面不用频繁的拷贝转移。下面,就一起来看看Li...转载 2018-06-09 08:41:19 · 1220 阅读 · 1 评论 -
带你深入理解STL之Vector容器
C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便。STL实现了一个Vector容器,该容器就是来改善数组的缺点。vector是一个动态空间,随着元素的加入,它的内部机制会自行扩充以容纳新元素。因此,vector的运用对于内存的合理利用与运用的灵活性有很大的...转载 2018-06-09 08:39:42 · 199 阅读 · 0 评论 -
带你深入理解STL之Set和Map
STL的set和map都是基于红黑树实现的,和stack和queue都是基于deque一样,它们仅仅是调用了RBTree提供的接口函数,然后进行外层封装即可。本篇博客理解起来比较轻松,set和map的源代码也不多,大家可以慢慢“品味”。另外,还会介绍multiset和multimap这两个容器,并给出它们的区别和应用等。还等什么呢?走吧,带你理解理解set和map吧!setset是一种关联式容器,...转载 2018-06-09 07:47:27 · 559 阅读 · 0 评论 -
lib和dll文件的区别和联系
什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37) (1)lib是编译时需要的,dll是运行时需要的。 如果要完成源代码的编译,有lib就够了。 如果也使动态连接的程序运行起来,有dll就够了。 在开发和调试阶段,当然最好都有。 (2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。...转载 2018-06-10 09:56:18 · 427 阅读 · 0 评论 -
静态成员函数
静态成员函数的定义与一般成员函数的定义相同,只是在其前面冠以static关键字,其定义格式如下 :class 类名{…static 类型 函数名(形参){ 函数体 }…};说明:(1)类的静态成员函数只能访问类的静态数据成员,而不能访问类中的普通函数成员(非静态数据成 员),因为普通数据成员只有类的对象存在时才有意义。(2)静态成员函数与类相联系,而不与类的对象相联系,...转载 2018-06-10 10:06:37 · 700 阅读 · 0 评论 -
迭代器二分查找
bool search_value_loop(std::vector <int> &ivec,const int search_value,std::vector <int> ::difference_type & position){ auto start=ivec.cbegin(); auto end=ivec.cend(); auto mid=...原创 2019-03-19 20:03:23 · 308 阅读 · 0 评论 -
C++面试题
1.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值int a = 4;(A)a += (a++); (B) a += (++a) ;© (a++) += a;(D) (++a) += (a++);a = ?答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;改后答案依次为9,10,10,11我在linux下编译,D也是错误的,可能某些编译器会...原创 2018-10-04 22:12:18 · 501 阅读 · 0 评论 -
C/C++面试题
5、请简述以下两个for循环的优缺点(5分) for (i=0; i<N; i++){if (condition) DoSomething();else DoOtherthing();}优点:程序简洁 缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对...转载 2018-10-04 20:15:33 · 139 阅读 · 0 评论 -
C++中指针常量和常量指针的区别
在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,但是对这两个的概念还是很容易搞糊涂的。本文即是简单描述指针常量和常量指针的区别。常量指针定义: 又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量,这个常量是指针的值(地址),而不是地址指向的值。 关键点: 1.常量指针指向的对象不能通过这个指针来修改,...转载 2018-10-04 15:38:34 · 1500 阅读 · 0 评论 -
DTC
//.h#pragma once#include <iostream>#include <string>#include <vector>#include <fstream>using namespace std;class mycdt{public: mycdt(); ~mycdt(); void ...原创 2018-08-17 08:37:25 · 644 阅读 · 0 评论 -
C++ tinyxml
include “tinyxml.h”include “tinystr.h”include include using namespace std;/* int readxmlFile() { TiXmlDocument mydoc(“FAULT.XML”); bool loadOk = mydoc.LoadFile(); if (...原创 2018-08-17 08:30:03 · 166 阅读 · 0 评论 -
C和C++中 struct 和 typedef struct 的区别
C和C++在结构体上的区别:C中,定义一个结构体变量必须要用typedef(只有这一种方式):typedef struct Student{ int a; float b;}Stu;Stu s1;s1.a=1;s1.b=2.2;而在C++中,有两种方式,方式一:不需要typedef即可定义struct Student{ int a; float b;}...原创 2018-06-18 10:26:22 · 246 阅读 · 0 评论 -
C++中struct和class的区别
有很多人在学习C++的 时候只是了解了C++的语法,或者更高层次的人是理解了oo(面向对象),但在这样的学习过程中,往往一些最基本的问题反而被忽略了。当然,这些问题或许 在你做工程中,不会有太大的影响,只要按照平时一贯的良好编码习惯,依旧可以写出好的代码;但某些时候,或许就是这些最基本的小问题,会让你的程序BUG 难以发现,而注意到某些问题后,同时还将会提升你程序的性能。所以,还是让我们把这些最基...转载 2018-06-10 09:59:03 · 129 阅读 · 0 评论 -
如何判断浮点数是否相等
对两个浮点数判断大小和是否相等不能直接用==来判断,会出错!明明相等的两个数比较反而是不相等!对于两个浮点数比较只能通过相减并与预先设定的精度比较,记得要取绝对值if (fabs(f1 - f2) < 预先指定的精度){ ...}例子:#define EPSILON 0.000001 //根据精度需要 if (fabs(fa - fb) < EPSILON){ ...转载 2018-06-10 10:06:03 · 8748 阅读 · 0 评论 -
C++重载流插入运算符和流提取运算符
C++的流插入运算符“<<”和流提取运算符“>>”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream。cin和cout分别是istream类和ostream类的对象。在类库提供的头文件中已经对“<<”和“>>”进行了重载,使之作为流插入运算符和流提取运算符,能用来输出和输入C++标准类型的数据。因此...转载 2018-06-10 10:06:23 · 1453 阅读 · 0 评论 -
指针数组,数组指针的区别
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址...转载 2018-06-09 07:27:47 · 109 阅读 · 0 评论 -
指针函数与函数指针的区别
一、在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针...转载 2018-06-08 23:17:13 · 136 阅读 · 0 评论 -
c++ stl栈stack介绍
C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。c++ stl栈stack的头文件为: #include <stack> c++ stl栈stack的成员函数介绍操作 比较和分配堆栈empty() 堆栈为空则返回真pop() 移除栈顶元素push() 在栈顶增加元素size() 返回栈中元素数目top(...转载 2018-05-23 22:14:11 · 2368 阅读 · 0 评论 -
有关 QString::toStdString() 使用的一个细节问题
当时的代码是这样子的:C++// 1QString str = "Hello, world!";char *cStr = str.toStdString().c_str();// 2std::string sstr = str.toStdString();char *cStr2 = sstr.c_str();// 3func(str.toStdString().c_str());...转载 2018-05-22 21:24:56 · 8625 阅读 · 1 评论 -
C++ operator关键字(重载操作符)
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。 一、为什么使用操作符重载?对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提...转载 2018-05-25 16:01:10 · 866 阅读 · 0 评论 -
static_cast
static_cast一般用来将枚举类型转换成整型,或者整型转换成浮点型。也可以用来将指向父类的指针转换成指向子类的指针。做这些转换前,你必须确定要转换的数据确实是目标类型的数据,因为static_cast不做运行时的类型检查以保证转换的安全性。也因此,static_cast不如dynamic_cast安全。对含有二义性的指针,dynamic_cast会转换失败,而static_cast却直接且粗...转载 2018-05-25 15:41:00 · 694 阅读 · 0 评论 -
enum与typedef enum的用法
在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:#define MON 1#define TUE 2#define WED 3#define THU 4#define FRI 5#define SAT 6#define SUN 7 在此,我们定义一种新的数据类型,希望它能完成同样的工作...转载 2018-05-20 18:35:08 · 293 阅读 · 0 评论 -
C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
关键词:构造函数,浅拷贝,深拷贝,堆栈(stack),堆heap,赋值运算符摘要: 在面向对象程序设计中,对象间的相互拷贝和赋值是经常进行的操作。 如果对象在申明的同时马上进行的初始化操作,则称之为拷贝运算。例如: class1 A("af"); class1 B=A; 此时其实际调用的是B(A)这样的浅拷贝操作。 如果对象在申明之后,在进行的赋值运算,我们...转载 2018-05-05 17:24:46 · 812 阅读 · 0 评论 -
C++中数字与字符串之间的转换
1、字符串数字之间的转换(1)string --> char * string str("OK"); char * p = str.c_str();(2)char * -->string char *p = "OK"; string str(p);(3)char * -->CString char *p ="OK"; CString m_Str(p); ...转载 2018-05-03 21:13:10 · 158 阅读 · 0 评论 -
string str字符串和char str[] 字符串数组
string类包含char型数组,char型数组想用string类型的字符串的话,要转换才行string只能拼接字符串,不可以带int类型的数据,但是sprintf()可以#include <iostream>#include <string>using namespace std;int main(){ string name = "fan"; string ...原创 2018-05-03 23:43:20 · 1264 阅读 · 0 评论 -
string 与char* char[]之间的转换
1、首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。注意,与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将s...转载 2018-05-03 23:29:39 · 100 阅读 · 0 评论 -
c++ sprintf()详解
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, a...转载 2018-05-03 22:27:22 · 6611 阅读 · 0 评论 -
进程的状态
在Linux操作系统中,每个进程在不同时刻都可能会有不同的状态。这些进程可能的状态共有6个,分别是:可运行状态、可中断的睡眠状态、不可中断的睡眠状态、暂停状态或跟踪状态、僵尸状态和退出状态。下面我们分别对这几种状态进行简要的说明。可运行状态(TASK_RUNNING,简称为R):如果一个进程处在该状态,那么说明它将要、立刻或正在CPU上运行。运行的时机是不确定的。这会由进程调度器来决定。可中断的睡...转载 2018-06-13 16:02:15 · 323 阅读 · 1 评论 -
C++ 初始化列表
何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。struct foo{ string name ; int id ; foo(string ...转载 2018-06-06 20:52:45 · 210 阅读 · 0 评论 -
C++ 引用计数技术及智能指针的简单实现
正文一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧)。最近花了点时间认真看了智能指针,特地来写这篇文章。回到顶部1.智能指针是什么简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言,复制对象时,副本和原对象都指向同一存储区域,如果通过一个副本改变其所指的值,则通过另一对象访问的值也会改变.所不同的是,智...转载 2018-06-08 16:08:35 · 305 阅读 · 0 评论 -
求字符串长度
1.使用sizeof获取字符串长度sizeof的含义很明确,它用以获取字符数组的字节数(当然包括结束符\0)。对于ANSI字符串和UNICODE字符串,形式如下:sizeof(cs)/sizeof(char) sizeof(ws)/sizeof(wchar_t) 可以采用类似的方式,获取到其字符的数目。如果遇到MBCS,如"中文ABC",很显然,这种办法就无法奏效了,因为sizeof()并不知道...原创 2018-06-15 07:11:53 · 13782 阅读 · 0 评论 -
句子反转
题目描述给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “helloxiao mi”-> “mi xiao hello”输入描述:输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)输出描述:对于每个测试示例,要求输出句子中单词反转后形成的句子示例1输入复制hello xiao mi输出复...原创 2018-06-14 21:50:02 · 157 阅读 · 0 评论