C++
文章平均质量分 61
记录C++中的基础,逐渐深入
肩上风骋
日积月累,熟能生巧。
展开
-
C++面试题
引言最近碰到几道很有必要一提的试题,这里记录一下,主要是关于指针的一些理解。原创 2024-04-08 18:38:07 · 444 阅读 · 0 评论 -
C++中实现String类
本文主要记录自己实现一个String类中的部分功能。原创 2024-03-12 16:48:00 · 444 阅读 · 0 评论 -
C++中类模板的定义和使用
类模板的声明和定义一般都是放在同一个文件中,将其文件后缀名改为hpp。原创 2024-03-11 19:18:11 · 978 阅读 · 0 评论 -
C++实现引用计数(二)
对于共享指针shared_ptr的原理:每当有一个指针指向这块内存,引用计数的值加一,每当一个指针不再指向这块内存,引用计数的值减一,知道引用计数的值减为0,则释放这块内存。上述引用计数实现时,需要注意的是,对于计数所用的加计数/减计数变量,以及指向共有的内存所用的指针需要作为一个共有的部分,可以被多个不同的智能指针都访问到,且不能直接作为引用计数类的直接数据成员。直接打开vs2019,创建基于C++的Windows空项目,添加一个主函数类,添加一个引用计数需要的头文件hpp。原创 2024-03-11 17:51:40 · 442 阅读 · 0 评论 -
C++中boost库的安装及使用(Windows)
本文提供了指定版本的IDE下编译生成的boost库可供下载,直接使用。外加如何在vs2019安装使用Boost的方法说明原创 2024-02-29 17:10:22 · 894 阅读 · 0 评论 -
C++多线程通信
多线程通信与多线程同步很多时候容易被人弄混,本文旨在指出两者区别,同时通过简单示例介绍消息队列。原创 2024-02-27 14:54:21 · 1423 阅读 · 0 评论 -
C++中atomic的使用
本文只要讲述C++11中atomic的使用,并通过示例来进一步的说明。atomic在c++11中被引入,作为一种原子操作,之所以是原子操作,是因为其能保证操作过程不会被打断或终止,保证了被操作数据的安全性。原子操作是线程安全的。尤其在多线程同步中,常用于基本类型共享数据的保护。原子操作:指的是不可被中断的一个或一系列操作,这些操作要么全部执行成功,要么全部不执行。原创 2024-02-26 14:43:40 · 1403 阅读 · 0 评论 -
C++线程同步(下)
本文主要承接之前的多线程同步(上),来记录剩下的几种同步方式。原创 2024-02-26 10:14:44 · 901 阅读 · 0 评论 -
C++种pair的初始化及与unordered_map的区别
本文旨在介绍pair初始化,同时简述pair与unordered_map的区别。原创 2024-02-23 16:18:16 · 470 阅读 · 0 评论 -
C++多线程同步(上)
可以不用,是因为当3个读线程都获取共享锁后,接下来只能是3个读线程中的一个线程可以获取独占锁,而当获取独占锁的读线程执行完for循环输出后,就会退出线程处理函数,同时独占锁的生命周期结束,g_mutex被释放,剩余的2个度线程中的一个就会获取独占锁继续向下执行,而另一个继续阻塞等待锁的释放。IsReady) {…多个读线程一起读的时候,就会有多个读线程之间的竞争,会出现类似于本应该一个读线程需要读一个容器中的多个元素,但当它读了第一个元素后,可能另一个读线程就抢着读了,不能保证每个读线程读数据时的连续性。原创 2024-02-22 11:44:48 · 1468 阅读 · 0 评论 -
C++中const的使用
在开发中const常用来修饰一些变量,像:函数的形参,函数返回值,指针.本文就const使用进行了总结。原创 2024-02-21 14:23:20 · 774 阅读 · 0 评论 -
C++中线程的创建
当编写的程序在运行时,出现界面卡顿,或者当程序处理一些比较耗时的计算时,将所有的操作的都放在主线程,就显得有些不妥,这时若是能将一部分的计算放在子线程中,便可以提高软件的性能,同时也可以提升用户的体验。上面提到使用函数指针作为创建线程的参数传入,那个例子种,线程处理函数是没有参数的。这里提到的线程处理函数是有参的线程处理函数,创建线程时将函数指针传入,同时要传入相应的实参。在学习C++的过程中,线程的使用作为一个非常重要的部分,也是在复杂项目中课有效提升程序的性能的手段,所以必须会。原创 2024-02-20 20:22:07 · 605 阅读 · 0 评论 -
C++中自定义类型使用标准输入cin输出cout
当自己定义的数据为一些复杂数据,不再为基本数据类型,这时候要使用cout输出这些数据,就需要重载输出运算符原创 2024-02-19 14:53:10 · 469 阅读 · 0 评论 -
获取部分STL容器中最后一个元素
有时候开发过程中,想直接获取STL容器中最后一个元素,这里提供了一些容器直接获取最后一个元素的方法。本篇内容较为简单,酌情阅读。示例如下,涉及的容器的头文件#include:array示例如下,涉及的容器的头文件#include:list示例如下,涉及到的容器的头文件#includequeue示例如下,涉及到的容器的头文件#includeset示例如下,涉及到容器的头文件#include:map示例如下,涉及到容器的头文件#include<unordered_map>以上示例较为简单,原创 2024-01-31 11:41:49 · 414 阅读 · 0 评论 -
string字符串查找指定字符,删除,追加,反转及比较
string字符串常用且易被忽略的操作:删除,查找,反转,追加原创 2024-01-19 11:22:00 · 2512 阅读 · 0 评论 -
C++中map按照从大到小的顺序存储元素
map是C++标准容器中的一种,也是一种关联容器,用于存储键值对,内部使用红黑树实现,可以快速查找和插入。其存储的元素默认按照键的大小从小到大的递增。原创 2024-01-16 21:27:03 · 1803 阅读 · 1 评论 -
C++设计模式之策略模式
策略模式是一种行为设计模式。在策略模式中,可以创建一些独立的类来封装不同的算法,每一个类封装一个具体的算法,每一个封装算法的类叫做策略(Strategy),为了保证这些策略的一致性,一般会用一个接口或者抽象类做统一的规定,所有的策略类都需要遵守这个接口或者抽象类规定的行为。同时定义一个 Context 类来管理算法的使用,通过参数将策略类传递给Context类,运行时动态的决定调用那个具体的算法。策略模式实际上就是一种多态的应用。原创 2023-11-24 22:52:03 · 629 阅读 · 0 评论 -
C++设计模式之工厂模式(下)——抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一种封装一组相关或相互依赖对象的方式,而无需指定它们具体的类。它允许客户端使用抽象接口来创建一系列相关的对象,而不必关心其实际的实现细节。在抽象工厂模式中,存在一个抽象工厂类,该类定义了一组创建对象的方法,这些方法可以创建一系列相关的对象,包括产品对象和工厂对象。由于这些对象都是通过一个抽象接口来创建的,因此它们的具体实现可以被隐藏在实际工厂类的后面。客户端只需要使用抽象工厂类来创建对象,而无需关心它们的实际实现。原创 2023-11-23 22:14:37 · 468 阅读 · 0 评论 -
C++设计模式之工厂模式(中)——工厂模式
工厂模式先抽象出一个抽象工厂,再子类化抽象工厂,将对应产品对象的创建放在子类工厂中。也就是一个子工厂负责生产一种产品,即具体的产品对象由对应的具体的子工厂创建。当产品种类增加,只需增加新的子工厂来生产,遵守开放封闭原则。原创 2023-11-23 19:59:06 · 397 阅读 · 0 评论 -
C++设计模式之工厂模式(上)——简单工厂模式
工厂模式属于一种创建型设计模式。其可以分为简单工厂模式,工厂模式和抽象工厂模式。工厂模式分为上、中、下三篇,本篇主要介绍简单工厂模式。简单工厂模式可以理解为一个工厂根据产品的种类生产多种不同的产品。简单工厂模式只有一个工厂类,工厂类中提供一个工厂函数,用于根据产品种类生产各种不同产品。原创 2023-11-23 17:35:24 · 534 阅读 · 0 评论 -
C++设计模式——单例模式
单例设计模式原创 2023-11-20 21:41:48 · 612 阅读 · 0 评论 -
C++实现一个链栈
链栈不名思意,就是既具有链表的特性,又具有栈的特性。链栈中的元素由指针域和数据域组成,通过指针指向下一个元素;2.链栈同时又具有栈的特性,先进后出。原创 2023-08-08 16:56:15 · 316 阅读 · 0 评论 -
double类型的变量与0的对比
日常总是会遇到double类型变量与0之间的比较。非严格情况下直接与0比较了,但实际上这是一种错误的写法。double为双精度类型,其一般保留15为小数。而Flaot单精度类型一般保留6为小数。故而不能直接与0进行比较,虽然有时候会得到自己想要的结果,但并不严谨。原创 2022-12-19 19:31:15 · 8212 阅读 · 0 评论 -
vs2017安装qt插件及安装qt插件后的设置
vs2017安装qt插件。原创 2022-10-16 15:24:57 · 8391 阅读 · 5 评论 -
C++容器deque的用法
C++容器deque的使用。转载 2022-09-19 19:07:29 · 2073 阅读 · 0 评论 -
C++线程处理函数的返回值
线程处理函数常见的返回类型为void,是否可以指定为其它类型的返回值呢。转载 2022-09-17 10:43:15 · 1696 阅读 · 2 评论 -
C++中list的一些内置函数
list的一些内置函数原创 2022-09-16 20:01:33 · 290 阅读 · 0 评论 -
关于C++编程中引入头文件的顺序
C++编码时引入头文件的顺序。原创 2022-09-16 17:01:59 · 1708 阅读 · 0 评论 -
记录C++类中的一次函数调用
基类与派生类指针之间的相互指向,调用同名函数的问题。原创 2022-09-06 21:56:53 · 536 阅读 · 0 评论 -
C++11继承构造函数在类中的使用
派生类继承基类后,有时希望可以调用基类的构造函数来创建对象。C++11就提供了继承构造函数来实现这个想法。原创 2022-09-05 17:13:30 · 392 阅读 · 0 评论 -
c++构造函数执行顺序
构造函数调用问题。原创 2022-07-14 19:48:11 · 1051 阅读 · 0 评论 -
C++中关于树的一些定义
本文以一个简单的树为例,来记录树的一些概念。原创 2022-06-22 11:19:58 · 1625 阅读 · 0 评论 -
C++中队列的顺序存储
队列先进先出,队头出队,队尾入队,其存储可以分为顺序存储和链式储存。本文记录队列的顺序存储。也就是队列中的元素存储的内存空间是连续的,这里使用数组来模拟线性队列。原创 2022-06-21 17:51:38 · 476 阅读 · 0 评论 -
C++中实现链栈
链栈从概念上看是链表和栈的结合,含有栈先进后出的特性,也具有链表的动态增加节点的特性,这里相当于在链表的基础上增加只能从一端操作,且保持先进后出的特性。将头节点所在的那端看作栈顶,头节点后紧接着的节点所在的位置,即第一个存储数据的节点所在的位置为出栈入栈的位置。...原创 2022-06-17 21:26:31 · 640 阅读 · 0 评论 -
C++使用模板实现元素的反序
实现任意类型序列的反序。原创 2022-06-17 19:37:07 · 193 阅读 · 0 评论 -
C++中实现Stack
栈本着先进后出的原则,来存取数据。作为数据结构中的一种,仅以此文记录C++中栈的实现,可帮助提升编程能力与对栈的理解。原创 2022-06-17 19:18:42 · 836 阅读 · 0 评论 -
C++中单链表的实现
链表内存空间不一定连续,其扩展性较好。该文主要记录单链表的实现,该单链表含有一个非空的头节点。以上仅记录,方便理解。原创 2022-06-16 15:12:03 · 521 阅读 · 0 评论 -
C++中动态数组实现
动态数组Vector可以动态扩展内存,其采用连续的内存空间,当内存空间不足,便以原来的容量的2倍或者1.5倍成倍的扩展,本文仅以记录,帮助理解vector的实现原理。原创 2022-06-16 14:52:21 · 1480 阅读 · 0 评论 -
ifndef与#program once的区别
平时我们为了防止头文件的重复包含,会使用#ifndef或者#program once。这里记录一下它们之间的区别。原创 2022-06-16 10:12:06 · 3794 阅读 · 0 评论 -
记录greater和less
引言本文针对C++11中greater和less做简单的记录。本文使用visual studio 2017下控制台输出程序可以直接使用c++11特性。内部实现查看greater和less会看到其下面的实现;template<class _Ty = void> struct greater { // functor for operator> _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;原创 2022-05-18 18:50:27 · 725 阅读 · 0 评论