![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 66
lyc201219
我见过,我记录
展开
-
算法总结归纳(二)
注:题目来源力扣https://leetcode-cn.com/5、链表专题链表(Linked List) 是一种常见的基础数据结构, 是一种线性表, 但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer) 。由于不必须按顺序存储, 链表在插入的时候可以达到 O(1)O(1) 的复杂度, 比另一种线性表—— 顺序表快得多, 但是查找一个节点或者访问特定编号的节点则需要 O(n)O(n) 的时间, 而顺序表相应的时间复杂度分别是 O...原创 2022-04-20 09:31:32 · 488 阅读 · 0 评论 -
C++内存分配方式
内存分配方式有三种:1、从静态存储区域分配。内存在程序编译的时候已经分配好了。这些内存在程序整个运行期间都存在,如全局变量,static变量等2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。如数组,局部变量,形参。3、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delet...原创 2022-01-15 11:49:56 · 2596 阅读 · 1 评论 -
Makefile模板
1.生成.o文件EXECUTABLE:= project_nameLIBDIR:=LIBS:=INCLUDES:=SRCDIR:=CC:=g++CFLAGS:= -g -Wall -O0 -static -static-libgcc -static-libstdc++CPPFLAGS:= $(CFLAGS)CPPFLAGS+= $(addprefix -I,$(INCLUDES))CPPFLAGS+= -I.CPPFLAGS+= -MMDRM-F:= rm -f...原创 2021-11-17 15:55:13 · 247 阅读 · 0 评论 -
C++11常用新特性
nullptr 出现的目的是为了替代 NULL。在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么当编译char *ch = NULL;时,NULL 只好被定义为 0。而这依然会产生问题,将导致了 C++ 中重载特性会发生混乱,考虑:void fo原创 2021-11-04 10:34:24 · 934 阅读 · 0 评论 -
设计模式
单例模式这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:优点:缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。使用场景:注意事项:getInstance() 方法中需要使用同步锁 synchronized (Singleton.class原创 2021-11-04 10:21:53 · 93 阅读 · 0 评论 -
C/C++语言各数据类型大小和取值范围
位、字节和字是描述计算机数据单元或存储单元的术语。这里主要指存储单元。最小的存储单元是位(bit),可以存储0或1(或者说,位用于设置“开”或“关”)。虽然1位存储的信息有限,但是计算机中位的数量十分庞大。位是计算机内存的基本构建块。字节(byte)是常用的计算机存储单位。对于几乎所有的机器,1字节均为8位。这是字节的标准定义,至少在衡量存储单位时是这样。既然1位可以表示0或1,那么8位字节就有256(2的8次方)种可能的0、1的组合。通过二进制编码(仅...原创 2021-09-27 09:18:57 · 596 阅读 · 0 评论 -
STL之迭代器
迭代器(iterator)是一种抽象的设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器。除此之外,STL中迭代器一个最重要的作用就是作为容器(vector,list等)与STL算法的粘结剂,只要容器提供迭代器的接口,同一套算法代码可以利用在完全不同的容器中,这是抽象思想的经典应用。各个迭代器的功能如下:迭代器的操作:只有顺序容器和关联容器支持迭代器遍历,各容器支持的迭代器的类别如下:...原创 2021-09-07 09:18:11 · 119 阅读 · 0 评论 -
理解红黑树
1. 二叉树二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。即二叉树满足以下两个条件:1) 本身是有序树(若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树(Ordered Tree))。2) 树中包含的各个...原创 2021-09-06 16:02:16 · 111 阅读 · 0 评论 -
STL之容器
STL容器就是将运用最广泛的一些数据结构实现出来。容器用来管理某类对象。常用的数据结构:数组(array) , 链表(list), tree(树),栈(stack), 队列(queue), 集合(set),映射表(map), 根据数据在容器中的排列特性,这些数据分为序列式容器和关联式容器两种。1、顺序容器顺序容器有以下三种:可变长动态数组 vector、双端队列 deque、双向链表 list。它们之所以被称为顺序容器,是因为元素在容器中的位置同元素的...原创 2021-09-06 14:15:54 · 225 阅读 · 0 评论 -
STL总结
1、什么是STL?STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念...原创 2021-09-06 09:06:18 · 101 阅读 · 0 评论 -
初探静态库、动态库
1、什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。2、静态库之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件...原创 2019-06-30 15:50:59 · 121 阅读 · 0 评论 -
c++编程思想-----输入输出流介绍
1.1 为什么要用输入输出流 大的障碍是运行期间用作参数表函数的解释程序。这是在运行期间对格式串做语法分析以及从参数表中索取并解释变量的代码。产生这个问题的四个原因是: 1) 即使仅使用解释程序的一部分功能,所有的东西将获得装载。假如说: p r i n t f ( " % c " , ' x ' ) ; 我们将得到整个包,包括打印出浮点数...原创 2018-08-27 19:24:03 · 200 阅读 · 0 评论 -
c++ 使用 gsoap 调用 java WebService 中文乱码
原文如下:问题产生: 使用gsoap时,如果WebService服务端及客户调用端都使用C++,再传递中文时不会存在乱码问题,当客户端为C++,WebService服务端使用Java、domino,传递中文则会有乱码问题。产生原因:宽字符的原因解决办法(一):在程序中首先设置本地代码页 vi...原创 2017-03-22 10:28:05 · 654 阅读 · 1 评论 -
singleton模式的double-check
翻译 2018-02-01 14:35:57 · 335 阅读 · 0 评论 -
多线程内部情况(三种线程模型)
多线程内部情况(三种线程模型)1.一对一模型 一般直接使用API或系统调用创建的线程均为一对一的线程。 由于许多操作系统箱子了内核线程数量,因此一对一线程会让用户的线程数量受到限制。许多操作系统内核线程调度时,上下文切换的开销较大,导致用户线程的执行效率下降。2.多对一模型 多对一模型将多个用户线程映射到一个内核线程上,线程之间的切换由用户的代码来进行,因此相对于一对一模型,多翻译 2018-02-01 14:56:56 · 2510 阅读 · 0 评论 -
预编译和编译
预编译: 将所有"#define"删除,并且展开所有宏定义。 处理所有条件预编译指令,比如"#if"、"#ifdef"、"#elif"、"#else"、"#endif". 处理"include"预编译指令,将被包含的文件插入到改预编译指令的位置。注意,这个 过程是递归进行的,也就是说被包含的文件可能还包含其他文件。 删除所有的注释。 添加行号和文件名标识,比如#2 "hel原创 2018-02-01 16:39:13 · 385 阅读 · 0 评论 -
Lua和C++交互详细总结
转自:https://www.cnblogs.com/sevenyuan/p/4511808.html一、Lua堆栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远...转载 2018-08-03 14:08:54 · 178 阅读 · 0 评论 -
c++编程思想---对象的演化
1、基本概念: C + +包含了比面向对象程序设计基本概念更多的内容。1.1 对象:特性+行为 类描述了一组有相同特性(数据元素)和相同行为(函数)的对象。类实际上就是数据类型,例如,浮点数也有一组特性和行为。区别在于程序员定义类是为了与具体问题相适应,而不是被迫使用已存在的数据类型。这些已存在的数据类型的设计动机仅仅是为了描述机器的存储单元。程序员可以通过增添他所...原创 2018-08-13 17:57:26 · 207 阅读 · 0 评论 -
c++编程思想----数据抽象
用程序设计术语,多产意味着用较少的人在较少的时间内完成更复杂和更重要的程序。然而,选择语言时确实还有其他问题,例如运行效率(该语言的性质引起代码臃肿吗?)、安全性(该语言能有助于我们的程序做我们计划的事情并具有很强的纠错能力吗?)、可维护性(该语言能帮助我们创建易理解、易修改和易扩展的代码吗?)。 库,简单地说就是一些人已经写的代码,按某种方式包装在一起。通常,最小...原创 2018-08-13 17:57:08 · 299 阅读 · 0 评论 -
c++编程思想---数据隐藏
1.1 设置限制 在任何关系中,存在相关各方都遵从的边界是很重要的。当我们建立了一个库之后,我们就与该库的用户(也可以叫用户程序员)建立了一种关系,他是另外的程序员,但他需要用我们的库来编写一个应用程序或用我们的库来建立更大的库。 需要控制对结构成员的存取有两个理由:一是让用户避开一些他们不需要使用的工具,这些工具对数据类型内部的处理来说是必须的,但对用户特定问题的...原创 2018-08-27 18:49:29 · 1021 阅读 · 0 评论 -
c++编程思想----函数重载与缺省参数
1.1 范围分解 我们可以对不同的函数用同样的名字,只要函数的参数不同。编译器会通过分解这些名字、范围和参数来产生内部名以供连接器使用。 对名字的范围分解还可以带来一个额外的好处。这就是,在 C中,如果用户错误地声明了一个函数,或者更糟糕地,一个函数还没声明就调用了,而编译器则按函数被调用的方式去推断函数的声明。这是一个特别严重的问题。有时这种函数是正确的,但如果不...原创 2018-08-27 18:56:21 · 138 阅读 · 0 评论 -
MFC使用第三方CSpreadSheet
有些时候我们希望将输出的数据存到EXCEL文件或一些符号分隔文本文件(像逗号分隔、Tab符分隔)。CSpreadSheet类封装了对这些文件的读写操作。CSpreadSheet类的目标是简单易用,其主要的特性如下:1、构造一个新的EXCEL文件或符号分隔文本文件,并在其中写如行或单个的单元。2、读取行、列或单个单元。3、覆盖、插入或追加行。4、将已存在或新的EXCEL文件转化成符号...原创 2017-03-28 11:29:05 · 594 阅读 · 0 评论