
C++&LeetCode
记录C++相关知识
Zack_Liu
这个作者很懒,什么都没留下…
展开
-
c++中的3种智能指针
3种智能指针为shared_ptr, unique_ptr,weak_ptr;shared_ptr 的实现原理是封装了一个引用计数,当引用计数为零时就会释放内存。weak_ptr 是一种弱引用,其不会增加引用计数,其唯一的作用是为了解决shared_ptr循环引用带来的内存泄露问题。unique_ptr 是一种独占的智能指针,禁止其他智能指针共享一个对象。但可用std::move来转移给其他unique指针。...原创 2021-10-27 10:33:46 · 319 阅读 · 0 评论 -
map、set、multimap、multiset和unordered_map、unordered_set、unordered_multimap、unordered_multiset的底层实现
map、set、multimap、multiset 的底层实现为 红黑树unordered_map、unordered_set、unordered_multimap、unordered_multiset的底层实现为哈希表原创 2021-10-27 10:07:28 · 276 阅读 · 0 评论 -
C++友元 (友元函数和友元类)
文章目录1.友元的作用2. 友元的使用方法2.1友元函数使用举例2.2友元类使用举例3. 友元使用注意事项1.友元的作用将类A或者类A中的成员函数在类B中声明为类B的友元,目的是为了让类A或者类A中的成员函数可以读写类B的私有成员。2. 友元的使用方法语法为friend 返回值类型 函数名(参数表); //将全局函数声明为友元friend 返回值类型 其他类的类名::成员函数名(参数表); //将其他类的成员函数声明为友元2.1友元函数使用举例例程如下:第 3 行声明了 CCar原创 2021-06-25 15:01:24 · 252 阅读 · 0 评论 -
c++中的虚特性(虚基类、虚函数、纯虚函数)
1. 虚基类1.1 虚基类作用为了解决多继承时的命名冲突和冗余数据问题,使得派生类中只保留一份间接基类的成员。其本质是是让某个类做出声明,承诺愿意共享它的基类。其中,这个被共享的基类就称为虚基类(Virtual Base Class)换个角度讲,虚派生只影响从指定了虚基类的派生类中进一步派生出来的类,它不会影响派生类本身。建立对象时所指定的类称为最远派生类。 虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。 在整个继承结构中,直接或间接继承虚基类的所有派生原创 2021-06-25 13:52:12 · 4790 阅读 · 2 评论 -
C++11非受限联合体(union)
在 C/C++中,联合体(Union)是一种构造数据类型。在一个联合体内,我们可以定义多个不同类型的成员,这些成员将会共享同一块内存空间。老版本的 C++ 为了和C语言保持兼容,对联合体的数据成员的类型进行了很大程度的限制,这些限制在今天看来并没有必要,因此 C++11 取消了这些限制。C++11 标准规定,任何非引用类型都可以成为联合体的数据成员,这种联合体也被称为非受限联合体。例如:class Student{ public: Student(bool g, int a): gen..转载 2021-06-23 14:39:01 · 433 阅读 · 0 评论 -
哈希表
文章目录1. 哈希表定义2.哈希表特点2.1 哈希冲突2.2 负载因子1. 哈希表定义哈希表又称为散列表 是一种使用哈希函数组织的数据结构,支持快速插入和搜索。2.哈希表特点2.1 哈希冲突哈希函数的不完美会导致哈希冲突,哈希冲突不可避免。2.2 负载因子负载因子又称为装填因子,反映了哈希表的装满程度。比较合理的负载因子为0.7...原创 2021-05-07 16:11:40 · 818 阅读 · 0 评论 -
STL容器总结
文章目录1. 队列(queue)1.1 定义:1.2 容器类型:1.3 队列函数列表:1. 队列(queue)1.1 定义:队列是一种逻辑数据结构,其具有先进先出的特性,只能在队的前端进行删除, 在队的后端进行插入。1.2 容器类型:是容器的容器,内部是使用其它容器来存放具体数据。内部默认数据存放容器为deque1.3 队列函数列表:queue入队,如例:q.push(x); 将x 接到队列的末端。queue出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值原创 2021-04-20 10:22:59 · 239 阅读 · 0 评论 -
堆和栈
目录1.栈1.栈栈,又叫做堆栈,是一种操作受限的线性表,可成为限定性的数据结构.栈仅在表尾进行插入和删除操作.表尾称为栈顶,表头称为栈底;栈的操作包括,栈顶(表尾)插入和删除,初始化,判空以及取栈顶元素.TODO...原创 2021-03-11 21:42:18 · 82 阅读 · 0 评论 -
三种编程方式
编程方式一共有三种:函数式编程,声明式编程,命令式编程。函数式编程:函数式编程关心数据的映射,产生的结果(即只关注做什么得到什么结果,而不是怎么做的过程)和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里函数的计算可随时调用命令式编程的主要思想是关注函数执行的步骤声明式编程是以数据结构的形式来表达程序执行的逻辑。它的主要思想是告诉计算机应该做什么,但不指定具体要怎么做。注:通过观察声明式编程的代码我们可以发现它有一个特点是它不需要创建变量用来存储数据。另原创 2021-03-10 16:04:20 · 4571 阅读 · 0 评论 -
STL六大组件
文章目录c++六大组件包括:容器,迭代器,算法,适配器,函数对象和分配器容器分为序列式容器(vector,list,deque)和关联式容器(set,multiset,map, multimap)适配器讲解分配器讲解1分配器讲解2函数对象又称为仿函数,其实是在类中重载运算符()...原创 2021-02-17 20:37:29 · 88 阅读 · 0 评论 -
c++多线程编程1----具体概念理解
一、线程的互斥和同步线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。同步还可以使得有关联交互作用的代码按一定的顺序执行。线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该...转载 2018-03-05 21:42:31 · 316 阅读 · 0 评论 -
sprintf 编辑 sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有
sprintf编辑sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。中文名字符串格式输出外文名string print format外语缩写sprintf主要功能把格式化的数据写入某个字符串中头文件stdio.转载 2017-10-29 14:36:22 · 561 阅读 · 0 评论