
C++Language
文章平均质量分 87
wanWan呐
code changes the world
hello world!!!
展开
-
位图&&布隆过滤器
位图位图其实也就是哈希的思想,就是用每一位来存放某种状态,通常是用来判断某个数据存不存在的。数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比 特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。位图的模拟实现class BitSet{public: BitSet(const size_t& bitCount) :_bitCount(bitCount) { _bit.resize((bitCount >>原创 2020-10-24 10:47:27 · 333 阅读 · 0 评论 -
设计特殊类、单例模式(懒汉模式,饿汉模式)
1、设计一个类,只能在堆上创建对象实现方式:将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建。class HeapOnly{public: static HeapOnly* GetInstance() { HeapOnly* p = new HeapOnly; return p; }...原创 2020-07-04 22:01:15 · 75 阅读 · 1 评论 -
智能指针
在谈及智能指针指针之前,我先来介绍一下 RAII 这个技术:RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源的简单技术。在对象构造时获取对象资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。这样子做实际上把管理一份资源的责任托管给了一个对象。这种做法有两大好处:不需要显式地释放...原创 2020-07-27 21:28:32 · 313 阅读 · 0 评论 -
C++11(右值引用、移动构造、移动赋值、lambda表达式)
1、列表初始化(了解其用法)2、范围for循环3、final 与 overridefinal:定义最终类或修饰虚函数,是该类和虚函数不能被继承override:检查派生类虚函数是否重写了基类某个虚函数,如果没有重写编译报错。注意区分:如果基类定义纯虚函数,则子类必须重写纯虚函数。4 、新增加容器—静态数组array、forward_list(单链表)以及unordered_xx系列...原创 2020-04-30 16:38:07 · 819 阅读 · 0 评论 -
模板(非类型模板参数、模板特化、模板分离编译)
模板参数类型模板参数:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型模板参数:就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用 比如用非类型模板参数定义一个静态数组 template<class T, size_t N = 10>注意:浮点数、类对象以及字符串是不允许作为非类型模板参数的。非类型...原创 2020-04-22 18:04:32 · 392 阅读 · 0 评论 -
模拟实现二叉搜索树
1、什么是二叉搜索树?二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树。2、二叉搜索树基本操作二叉搜索树的查找: //非递归查找 Node* Find(const K& key) { Node* ...原创 2019-12-10 15:13:41 · 705 阅读 · 0 评论 -
关于迭代器失效的问题
1、vector 迭代器失效vector 中的 insert (在发生扩容时)insert会导致迭代器失效,是因为 insert 可能会导致增容,增容后 pos 还指向原来的空间,而原来的空间已经被释放了,此时访问 *pos 会导致非法访问。 举个例子:int main(){ vector<int> v; v.push_back(1); v.push_back(2...原创 2019-11-18 02:33:35 · 919 阅读 · 0 评论 -
模拟实现STL_vector
1、关于实现 vector 类之前的一些问题vector 迭代器失效情况:迭代器失效问题在这篇博客里有详细提到:模拟实现成员函数 reserve 时候:不能用memcpy(),如果创建 vector< string > 类型对象,发生扩容的话用 memcpy() 是浅拷贝,所以应该用 for()循环来进行赋值运算符操作,详细情况可以看下面代码。2、模拟实现 ve...原创 2019-11-16 00:23:09 · 524 阅读 · 0 评论 -
模拟实现STL_list
1、模拟实现 list 之前应该注意到的问题1.1 list的迭代器list 的迭代器不是一个原生指针,list 的迭代器实现是 将原生态指针进行封装,list 迭代器的如何实现可以看下面的代码。1.1 list的迭代器失效(erase)在实现 erase 的时候会发生迭代器失效,因为 list 的底层结构为带头结点的双向循环链表,因此在 list 中进行插入时是不会导致 li...原创 2019-11-16 18:09:08 · 575 阅读 · 0 评论 -
详细介绍STL_list的用法
标准库中的 list 类1、list类文档介绍1.1 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。1.2 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。1.3与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的...原创 2019-11-16 17:47:00 · 604 阅读 · 0 评论 -
详细介绍STL_vector的用法
标准库当中的vector类vector类文档介绍vector类文档介绍总结:1、vector是表示可变大小数组的序列容器。2、就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3、本质讲,vector使用动态分配数组来存储它的元素。当新...原创 2019-11-15 16:41:24 · 502 阅读 · 0 评论 -
模拟实现STL_string
关于实现string类的一些问题深浅拷贝①浅拷贝:也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,以为还有效,所以 当继续对资源进项操作时,就会发生发生了访问违规。②深拷贝:如果一个类中涉及到资源的管理,其拷贝构造函数、赋值运算符重载以及析构函数必须要显式给出,...原创 2019-11-15 15:26:20 · 590 阅读 · 0 评论 -
详细介绍STL_string的用法
一、标准库中的string类string类文档介绍string类的文档介绍简单总结:1.string是表示字符串的字符串类2.该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。3.string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator&...原创 2019-11-15 14:20:13 · 1086 阅读 · 0 评论 -
cpp实现date类
模拟实现日期的计算,直接上代码了:#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;class Date{public: int GetMonthDay(int year, int month) { static int MonthDays[] = { 31, 28, ...原创 2019-10-24 23:52:21 · 691 阅读 · 0 评论 -
C++模板
1、泛型编程编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。模板分为两种:函数模板 与 类模板2、函数模板函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。函数模板格式:template < typename T1, typename T2 ,..., ftypename Tn>(T为参...原创 2019-10-15 00:05:45 · 501 阅读 · 0 评论 -
整理的 C/C+++ 内存与管理的一些面试题
1、C/C++内存分布给出一段代码:int globalVar = 1;static int staticGlobalVar = 1;void Test(){ static int staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"...原创 2019-10-11 20:23:25 · 843 阅读 · 0 评论 -
内存管理
一、C++内存管理方式C语言内存管理方式在C++中可以继续使用,但有些地方使用起来比较麻烦,因此 C++ 有自己的内存管理方式:通过 new 和 delete 操作符进行动态内存管理。①: new / delete 操作内置类型 :void Test(){ // 动态申请一个int类型的空间 int* ptr1 = new int; // 动态申请一个int类型的空间并初...原创 2019-10-04 23:02:02 · 564 阅读 · 0 评论 -
类和对象(3)【初始化列表、explicit、static、友元、C++11】
在前面我详细介绍了类和对象的一些基本语法,想要了解的戳此链接:类和对象1、类和对象2在本章博客中继续深入讨论类和对象。1、构造函数构造函数赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。class Date{public: Date(int year, int month, int day) { _year = year; _m...原创 2019-10-03 23:21:02 · 605 阅读 · 0 评论 -
类和对象(2)【默认成员函数】
在前面我详细介绍了类和对象的一些基本语法,想要了解的戳此链接:类和对象(1),在本章博客中继续深入讨论类的六个默认成员函数。如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。一、构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员 都有 一个合适的初始...原创 2019-09-15 17:50:59 · 491 阅读 · 0 评论 -
类与对象(1)【含this指针】
1.对象的初步认知C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。2.类的引入C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。3.类的定义在结构体的定义,在C++中更喜欢用class来代替:class class...原创 2019-09-11 00:03:52 · 533 阅读 · 0 评论 -
C++入门介绍
1.C++关键字先附图了解,后期会慢慢介绍2.命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用 域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污 染,namespace关键字的出现就是针对这种问题的。2.1 命名空间的定义定义命名空间,需要使用到namespace关键字,...原创 2019-08-01 17:04:21 · 542 阅读 · 0 评论