
C++
文章平均质量分 64
smx_dd
这个作者很懒,什么都没留下…
展开
-
哈希详解以及实现(开放定址法和拉链法)
我们在平时使用的顺序结构(顺序表等)和平衡树中,元素的关键码和其存储位置之间没有对应关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序表的时间复杂度为O(N),平衡树的时间复杂度为为树的高度,即O(log2N),搜索的效率取决于搜索过程中元素的比较次数。一种理想的搜索方法:可以不经过比较,一次直接得到要搜索的元素,如果构造一种存储结构,通过某种函数,使元素的存储位置和关键码能够建立一一...原创 2019-01-28 23:40:00 · 11386 阅读 · 1 评论 -
C++单例模式
一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。为什么要有单例模式?对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统等等。在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹...原创 2019-01-04 15:54:40 · 2642 阅读 · 1 评论 -
C++内存管理
我们首先来看一下C++中程序内存区域的划分1. 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。3. 堆用于程序运行时动态内存分配,堆是可以上增长的。4. 数据段--存储全局数据和静态数据。5. 代码段--可执行的代码/只读常量C++中内存管理方式...原创 2019-01-03 23:02:11 · 161 阅读 · 0 评论 -
C++知识点——类和对象
一、面向对象三大特性之一——封装封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。1. C++中struct与class的区别:struct 中默认成员为公有 public ;而 class 中默认成员为私有 private 。在C语言中 struct 中只能声明成员变量,不能声明成员函数函数,但是C++中 struct 可以声明成员函数。...原创 2019-01-01 20:03:19 · 3305 阅读 · 0 评论 -
C++基础知识点
一、命名空间在C++中,我们可以使用关键字 namespace 加命名空间名字再加花括号来创建一个新的命名空间,一个命名空间相当与一个新的作用域,在该命名空间下的所有成员都仅局限于这个命名空间中。而且命名空间 namespace 可以嵌套使用。我们来看一段代码:namespace N1{ int a = 10; int b = 20; int c = a + b; names...原创 2018-12-31 17:03:35 · 16294 阅读 · 4 评论 -
智能指针
智能指针的作用RAII(Resource Acquisition Is Initialization)代码中经常会忘掉释放动态开辟的资源,引用智能指针可用于动态资源管理,资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源 的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。智能指针的原理:智能指针是一个类,这个类的构造函数中传入一个普通指针,...原创 2018-10-28 16:17:59 · 275 阅读 · 0 评论 -
虚指针、虚表
我们都知道虚函数是c++实现多态性的体现,虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。我们来看一段代码:#include<iostream>using namespace std;class A{public: A(int a1) { a = a1; } virtual void fun1...原创 2018-10-22 17:22:33 · 404 阅读 · 0 评论 -
利用容器适配器实现栈和队列
利用模板实现分别实现一个顺序表和链表,再用着两个顺序表链表来实现栈和队列的容器适配器顺序表和链表代码博客链接:https://mp.youkuaiyun.com/postedit/83096307stack.h#pragma once#include"Seqlist.h"#include"list.h"//使用容器适配器实现栈template<class T,class Conta...原创 2018-10-21 18:57:56 · 254 阅读 · 0 评论 -
模板实现顺序表和链表
顺序表的实现:"Seqlist.h"#pragma oncetemplate<class T>class Seqlist{private: T* _array; size_t _size; size_t _capacity;public: Seqlist() :_array(NULL), _size(0), _capacity(0)//构造函数 { }...原创 2018-10-17 16:31:49 · 210 阅读 · 0 评论 -
创建或打开c++浏览数据库文件.sdf时发生错误。
在运行vs时遇到错误:创建或打开c++浏览数据库文件.sdf时发何时能错误。intelliSense和浏览信息将不能用于c++项目。请确保已安装Microsoft SQL Server Compact 4.0,并且没有其他应用程序正在访问该文件。如果问题仍然存在,请删除该文件,然后重新打开相应的解决方案。发生上面问题以后vs编译器是不完整的,代码没有颜色区别,鼠标放在代码上没有解释说明...原创 2018-09-18 12:38:25 · 3266 阅读 · 1 评论 -
C++知识——继承
继承概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。继承有三种方式:公有继承(public)、保护继承(protected)、私有继承(private...原创 2019-01-07 00:21:29 · 463 阅读 · 2 评论 -
C++知识——多态
多态概念在面向对象中,多态就是指不同对象收到相同消息时,产生不同的行为。一个源程序经过编译、链接,成为可执行文件的过程是把可执行代码联编在一起的过程。其中在运行之前就完成的联编称为静态联编,而在程序运行时才完成的联编叫动态联编。静态联编是指系统在编译时就决定如何实现某一动作。静态联编要求在程序编译时就知道调用函数的全部信息。因此,这种联编类型的函数调用速度很快。效率高是静态联编的主要优点。...原创 2019-01-08 15:17:25 · 327 阅读 · 0 评论 -
C++模拟实现string类
对于 string 类一定并不陌生,我们重点介绍一部分接口。1.void resize(size_t n,char c); 将字符串大小改变,如果大小是增加则后面添加字符 c,减少则保留前 n 个字符。2.void resize(size_t n); 和上面一样,只是默认添加字符为 '\0'。3.void reserve(size_t n); 扩容。4.size_t find(c...原创 2019-01-11 15:46:53 · 600 阅读 · 0 评论 -
STL——map和set模拟实现
map和set的底层是使用红黑树来实现的,接下来我利用红黑树来模拟实现一下map和set。map详解博客链接:https://blog.youkuaiyun.com/smx_dd/article/details/86531881set详解博客链接:https://blog.youkuaiyun.com/smx_dd/article/details/86555973红黑树详解与实现博客链接:https://blog....原创 2019-01-26 15:05:36 · 416 阅读 · 0 评论 -
红黑树的详解与实现
红黑树也是一种二叉搜索树,顾名思义,红黑树是节点为黑色或者红色的一棵二叉搜索树。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树与AVL树的比较:红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O(log2N),红黑树不追求绝对平衡,其只需保证最长路径不超过最短路径的2倍,相对而言,降低了插入和旋转的次数...原创 2019-01-24 23:24:28 · 210 阅读 · 0 评论 -
AVL树的详解与实现
之前详细讲解过了二叉搜索树(二叉搜索树详解博客链接:https://blog.youkuaiyun.com/smx_dd/article/details/86563142),但是二叉搜索树有缺陷,那就是当插入数据有序时,会退化成单支树,查找效率相当于一个链表。为了解决上述问题,有这样一种办法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降...原创 2019-01-21 20:28:52 · 1480 阅读 · 0 评论 -
二叉搜索树
二叉搜索树是一种特殊的二叉树,具有以下性质:1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。3.它的左右子树也分别为二叉搜索树。空树也是一颗二叉搜索树。二叉搜索树的中序遍历是有序的。二叉搜索树的查找:从根结点开始查找,若节点为空则返回 false;若不为空:1. 若节点大小大于要查找的节点,...原创 2019-01-20 16:46:06 · 305 阅读 · 0 评论 -
STL关联式容器(2)——set和multiset
一、set1. 在 set 中,元素的 value 也标识它( value 就是key,类型为 T ),并且每个 value 必须是唯一的。set 中的元素不能在容器中修改(元素总是 const),但是可以从容器中插入或删除它们。2.与map/multimap不同,map/multimap中存储的是真正的键值对<key, value>,set 中只放 value,但在底层实际...原创 2019-01-19 20:43:54 · 242 阅读 · 3 评论 -
STL关联式容器(1)——map和multimap
一、什么是关联式容器STL中的部分容器,像 vector、list、deque、forward_list 等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它和序列式容器有什么区别?关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。二、...原创 2019-01-18 20:31:26 · 273 阅读 · 0 评论 -
stl——容器适配器
适配器是一种设计模式,将一个类的接口转换为另外一个类接口。在 stl 中,常见的容器适配器有 stack、queue 和 priority_queue。容器适配器就是将特定容器类封装作为其底层容器类。在标准 stl 中,stack和queue默认底层容器都是deque。其实作为容器适配器,底层可以是任意的标准容器类模板之一,如果没有实例化指定底层容器,底层都默认是deque。他们只支持栈顶或者...原创 2019-01-17 18:05:21 · 404 阅读 · 0 评论 -
stl——模拟实现list
list 是最常用的 stl 库之一,它的底层就是一个带头的双向循环链表,所以我们在使用时也可以把它想象成这种链表。下面我们模拟实现list。在模拟实现 list 之前,我们首先要明确 list 的迭代器。迭代器的类型有两种,第一种就是原生态的指针,例如vector的迭代器。第二种就需要我们自己来封装,因为迭代器的使用和指针类似,所以我们需要明确一下几点:1. 对 operator*()进行...原创 2019-01-14 22:42:15 · 189 阅读 · 0 评论 -
stl——模拟实现vector
对于vector相信大家并不陌生,这里介绍一些重要的vector的接口和用法。1. 构造函数vector(); 无参构造vector(size_type n, const value_type& val = value_type()); 构造并初始化n个valvector (InputIterator first, InputIterator last); 利用迭代器进行构造。...原创 2019-01-13 16:03:09 · 420 阅读 · 0 评论 -
c++基础小知识点总结
1、const与指针一起使用有三种:指向常量的指针、常指针、指向常量的常指针。(1)指向常量的指针:int a=10;int c=30;const int * b=&a;上述代码中,b为一个指向常量的指针,可以改变指针b所指向的地址,但是无法改变指针b所指向地址的数据。列如:b=&c//正确*b=20//错误(2)常指针:int a=10;i...原创 2018-06-11 00:20:56 · 380 阅读 · 0 评论