自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 线程同步之互斥锁

线程同步之互斥锁

2022-12-07 22:50:12 266 1

原创 C++ 函数指针以及对void*(* func)(void *)的解读

C++ 函数指针以及对void*(* func)(void *)的解读

2022-12-05 22:09:07 2402

转载 C++ const用法总结

const的用法总结,主要分为const在变量中、函数中和类中的用法总结。

2022-11-30 22:41:24 1477

转载 快速掌握一个语言最常用的50%

实际上语言学习有一定规律可循,对于已经掌握一门语言的开发者来说,对于一般的语言,完全可以以最快的速度,在几天至一周之内掌握其最常用的50%,而且保证路子基本正宗,没有出偏的弊病。在现代编程环境下,这个问题是涉及开发思想的一个核心问题,几乎每种语言在这里都会用足功夫,.NET的delegate,Java的anonymous inner class,Java 7的closure,C++OX的 tr1::function/bind,五花八门。以下列出一个学习提纲,主要针对的是有经验的人,初学者不合适。

2022-11-25 01:06:53 175

原创 进程与线程学习(1)

进程即进行中的程序,上文提到为了提高CPU的利用率需要CPU在等待一个程序的下一条指令送达时去执行别的程序的指令,这里的一个个程序就是进程,计算机中的所有启动程序都是进程,操作系统最主要的功能就是管理这些进程。

2022-11-16 18:12:45 307

转载 django.db.utils.OperationalError: (1045, “Access denied for user ‘root‘@‘localhost‘ 报错解决

将settings.py里的MySQL密码修改成自己数据库的密码即可。

2022-09-13 10:41:45 526

转载 【C++笔记】关于push_back(vector<int>());

今天在刷leetcode题的时候见到如上三句代码,很有意思。第一句创建了一个实体为vertor的容器,可以理解为一个二维数组;第二句话相当于分隔符了,往二维数组里插入空的vector(),可以理解为分行,即二维数组的下一行;第三句话则是在每一行里插入数据。 以二叉树的层序遍历为例:输入:[3,9,20,null,null,15,7]输出:...

2022-07-12 12:38:29 675 2

原创 C++ STL priority_queue()容器适配器详解

优先级队列priority_queue()是STL中的一种容器适配器,需导入#include以使用。它具备以下特点:T:队列中存储的元素类型Container:底层容器。默认为vector,还可以用deque结构作为底层容器。Compare:排序规则。默认为less,即降序排序。还可以取greater升序排序。源码: priority_queue()是一种容器适配器,也就意味着它“不生产代码,只是代码的搬运工”。priority_queue()的构造函数及其方法的底层......

2022-07-02 20:15:59 646

原创 大顶堆、小顶堆与堆排序

堆的逻辑结构是一颗完全二叉树,而内存中实际的物理结构是一个顺序数组。完全二叉树是一种每一层都是从左往右放值直到把该层放满才会增长至更深层的结构。堆的数组到堆结构的映射关系满足:数组中第i个元素的左孩子为第2*i+1的元素,右孩子为第2*i+2的元素,父节点为第(i-1)/2 (取整数位,0位的父节点是自己)的元素。 大顶堆即对于堆中任何一颗子树来说,该子树的最大值一定是其根节点。小顶堆即对于堆中任何一颗子树来说,该子树的最小值一定是其根节点。该示例是一个可对无序堆进行堆排序变为大顶堆的程序,各函数意义详见注

2022-07-01 22:02:15 560

原创 实现一个多进程并发的服务器

项目来源:登录—专业IT笔试面试备考平台_牛客网该课程教授了如何使用socket API实现一个基于TCP协议的多进程并发的服务器。实现服务器之前,首先了解一下TCP通信的流程和所要用的各个API。TCP通信中,发起连接请求的一端称为客户端,被动接受连接的一端称为服务端。服务端:1.创建一个用于监听的套接字 -监听:监听客户端的连接 -套接字:一个socket文件描述符……socket()2.将这个监听文件的文件描述符和本地IP和端口绑定(也就是绑定socket地址信息)…

2022-07-01 19:47:42 524

原创 socket(套接字)与socket地址

socket(套接字)与socket地址

2022-06-30 20:53:50 1442

原创 复用和分用

多路复用与多路分用

2022-06-28 19:08:42 4374

原创 C++ STL deque容器详解

详解deque容器的结构、迭代器、迭代器常用函数、deque常用函数、所重载的运算符

2022-06-27 22:13:49 639

原创 字符串匹配的魔法——KMP算法

KMP算法

2022-06-27 17:34:09 102

原创 C++ STL iterator_traits()——萃取机

1.当算法想要操作容器的时候,它需要通过迭代器获取容器的一些信息,具体是回答五个问题:1.iterator_category 迭代器的类型:迭代器是一种泛型指针,因此对不同的容器的具体设计也不同(比如说有些迭代器可以++,也可以--,有些则只能++)2.difference_type 两个迭代器可能存在的最大距离:也就是容器的最大容量3.value_type 容器的值类型4.reference5.pointer为了回答这五个问题,迭代器需要定义五种数据类型。上图一种的

2022-05-09 17:25:36 891

原创 C++ STL vector容器详解——(2)push_back()剖析、vector的n倍增长特性与vector迭代器

1.push_back()push_back()函数用来往vector的末尾插入新元素,它的具体实现源码如下(基于G2.9):1.push_back函数首先会检查是否还有空间,有就插入,没有就调用insert_aux2.insert_aux也会先做一次剩余空间判断,这是因为调用该函数的不止push_back,可能存在其他插入函数没有做剩余空间检查。如果没有剩余空间,则根据原大小的n倍来计算新空间的大小,然后在内存中找到可以存放这个大小内容的空间。(这就是vector的n倍增长特性).

2022-05-09 17:14:13 1258

原创 C++ STL vector()容器详解——(1)创建、插入、删除

vector()是一种具有连续结构的序列式容器,它没有自定义的查找函数,使用std::find查找元素时间复杂度为O(n)。它依赖于start、finish、end_of_storage三根指针来控制整个容器,它们分别表示vector的起始位置、有效部分的终点位置和实际的终点位置,因此vector容器本身的大小是12 byte。在本文中,我将多次使用size()和capacity()这两个vector的成员函数,前者表示有效部分的大小,后者表示实际部分的大小,关于二者的差异稍后解释。1.如何创建一个

2022-05-09 16:34:30 1243

原创 C++ class与struct的区别

在C语言中,struct是作为数据类型存在的,因此其中只能包含变量,不可以包含函数,结构相对简单。而C++采用OOP编程思想,为struct扩充了很多属性,使得C++中的struct与class非常相似,而区别主要体现在默认权限上。先来看一个例子:#include<iostream>#include<string>using namespace std;struct Student{ //可以拥有构造函数(非必须) Student(string name, i

2022-04-28 16:59:05 2199

原创 C++ 初始化方式

在C++语言中,初始化和赋值是两种不同的概念,但是经常可以看到使用赋值运算符 = 来进行初始化,如:string str = "hello";这其实是使用了拷贝初始化。本文将以string类为例子,对各种初始化方式进行一个总结。 下表为string类的各种初始化方式[引自:C++ Primer (第五版)]:1. 默认初始化表中string类的第一种初始化方式称为默认初始化,用户没有给string实例s1一个初值,s1将是一个...

2022-04-25 17:47:19 3660

原创 刷题笔记:剑指offer 04.二维数组中的查找——一个报错

今天在力扣刷这一题的时候报了这个错误:Line 1033: Char 9: runtime error: reference binding to null pointer of type 'std::vector<int, std::allocator<int>>' (stl_vector.h)SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gn

2022-04-21 19:29:41 1417

原创 C++ 继承与动态内存分配

假设有基类baseDMA:class baseDMA{private: char* label; int rating;public: baseDMA(const char* l = "null", int r = 0); baseDMA(const baseDMA& rs); virtual ~baseDMA(); baseDMA& operator=(const baseDMA& s); friend ostream& opera...

2022-04-12 00:14:27 590

原创 静态联编、动态联编以及虚函数的工作原理

1.什么是静态联编和动态联编?程序调用函数时,要是用哪个可执行代码块呢?编译器负责完成这个问题,在编译阶段编译器会将函数调用解释为去到某个地址执行代码块,这称为函数名联编。在C++中,由于存在重载,编译器需要查看特征标来确认到底是用哪个函数,C++的编译器也可以在编译阶段完成这项工作,这称为静态联编。而虚函数的存在使得C++编译器无法在编译阶段完成这项工作,比如之前的例子中的基类指针数组,根据数组中具体存放的是基类对象还是派生类对象,才能确定调用哪个虚函数,这在编译阶段是不确定的...

2022-03-28 18:35:03 780

原创 多态与虚函数

1.什么是多态?多态即派生类重写了基类的方法,基于创建的对象是派生类还是基类,同名的方法会有不同的功能,这称为多态。2.在存在多态的情况下,通过对象调用方法和通过引用或指针调用方法有何不同?设类A有方法fun(),类B是类A的派生类,B重写了fun()方法:当使用对象来调用方法时:A a;B b;a.fun();//使用A的fun()b.fun();//使用B的fun()即根据对象类型调用相应方法...

2022-03-28 18:25:28 186

原创 关于为使用定位new运算符声明的类对象指针调用析构函数时出现的三个问题

前面学习到通过new运算符创建的对象指针只有通过显式的使用delete才能调用析构函数。那如果对象指针使用的是定位new运算符,要如何确保析构函数被调用呢?看以下例子:#include<iostream>using namespace std;class A{private: int num;public: A(const int n) { num = n; cout << num << " constructed" << endl; }

2022-03-24 17:11:59 376

原创 如何打印字符串指针的地址?

对于其他类型(othertype)的指针来说,指针名即地址:othertype* typename;cout << typename;但对于字符串指针来说,直接显示指针名将输出整串字符:char* str = "Hello World";cout << str;//输出 Hello World需要使用强制类型转换,将字符串指针转换为空指针类型:cout << (void*)str;这样做的原因暂时没找到,后续补充。...

2022-03-24 16:05:53 2141

原创 C++ 拷贝(复制)构造函数

拷贝构造函数用以将一个类的对象拷贝给同一个类的另一个对象,比如之前学习过的string类:string s1;string s2 = s1;一般情况下的拷贝构造函数:class A{private: int n; double d; char s;public: A(const A& a);};A::A(const A& a){ this->n = a.n; this->d = a.d; this->s = a.s;}即按

2022-03-19 22:38:33 6803

原创 如何初始化类中的静态变量?

在编程时会遇到这样的需求:统计某个类被实现了多少次?可以通过在类中声明一个静态成员变量来实现:class A{private: static int num_A;public: A(); }对于这样的一个静态成员变量,如何保证其在类多次创建的过程中只会初始化一次?错误的操作:1.在放置类的头文件中对其初始化,当该头文件被多个程序include时,num_A会被多次初始化,且将引发错误。2.在构造函数中对其初始化,当该类被实现时,num_A会被迫

2022-03-19 17:43:06 3929

转载 C++中rand()函数的用法

1、rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。2、如果你要产生0~99这100个整数中的一个随机整数,可以表达为:int num = rand() % 100; 这样,num的值就是一个0~99中的一个随机数了。3、如果要产生1~100,则是这样:int num = rand() % 100 + 1; 4、总结来说,可以表示为:int num = rand() % n +a; 其中的a是起始值,n-1+a是...

2022-03-17 17:04:00 37706 4

原创 C++ 两种声明动态数组方式的区别

在使用new申请动态数组时通常有两种做法:int *p0;p0 = new int[2];int *p0 = new int[2];一般来说,二者是等价的,但有时会出现一些意想不到的bug,举例:#include<iostream>using namespace std;int main(void){ int Len; int *p0 = new int[Len]; cout << "Input Len: "; cin >>

2022-03-09 01:30:00 395

转载 混合使用cin>>和cin.get()的问题

1、cin>>和cin.get()如下示例代码会到导致cin.get()语句被跳过,不等用户输入数据。char ch; int number; cout << "Enter a number: ”;cin >> number; // 读取整数cout << "Enter a character: ";ch = cin.get() ; // 读取字符cout << "Thank You!\n";在示例代码段中,当

2022-03-04 19:37:13 288

转载 C++ 字符串指针和字符串指针数组详解

C++处理字符串有两种方式,即:指针方式和数组方式数组方式:char a[] = "HelloWorld"; 指针方式:const char* s= "HelloWorld"; const可以忽略接下来详细讲解一下字符串指针首先,为什么字符串可以直接赋值给指针,即char* s = "HelloWorld"不会报错,不应该是把字符串的地址赋值给指针吗?原因:这里的双引号做了3件事:1.申请了空间(在常量区),存放了字符串 2. 在字符串尾加上了'/0' 3.返回地址为...

2022-03-02 20:55:25 9237 7

转载 C++ 获取string字符串长度的三种方法

1.用string的成员方法length()获取字符串长度length()比较直观,表示的就是该字符串的长度。#include <string> #include <iostream> using namespace std; int main() { string str = "my string"; cout << str.length() << endl; return 0; }

2022-03-01 02:28:22 28676 3

转载 库函数和系统调用的区别

系统调用:操作系统为用户提供了一系列接口,这些接口提供了对硬件设备的操作。举个例子我们用printf想终端打印hello world,程序中调用printf,而printf实际上调用的是write,从而打印信息到终端。库函数:库函数是对系统调用的封装。系统调用作为内核提供给用户的接口,它执行的效率是比较高效和精简的,但有时候我们需要对获取的信息进行一些处理,我们把这些处理过程封装起来提供给程序员,有利于编码。库函数有可能包含一个系统调用,有可能包含几个系统调用,也有可能不包含系统调用,一些简单的操作

2022-01-10 15:11:31 4711

原创 《C++ primer plus》读书笔记二:基础语法(第五章)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分

2021-10-13 11:30:26 123

原创 《C++ primer plus》读书笔记一:基础语法(第四章)

C++ primer plus 第四章:复合类型目录一、数组二、字符串string类三、结构struct四、共用体union五、枚举enum六、指针:使用new在运行阶段分配内存和释放内存delete七、模板类vector和array放到第十六章详细讲一、数组数组的创建:typeName arrayName[(arraySize)],如 int num[10];数组的初始化:int num[10] = {1,3,5,7};int num[1

2021-10-04 19:03:59 146

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除