自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++学习之第二十一天-vector容器底层实现以及类模板实现快排、堆排

1.Vector容器底层实现1.空间的申请和释放:allocate和deallocate//空间的申请,申请的是原始的,未初始化的空间pointer allocate( size_type n, const void * hint = 0 );T* allocate( std::size_t n, const void * hint);T* allocate( std::size_t n );//空间的释放void deallocate( T* p, std::size_t n );.

2021-11-24 16:09:48 1885

原创 C++学习之第二十天-STL之算法algorithm

知识点1.概述 算法中包含很多对容器进行处理的算法,使用迭代器来标识要处理的数据或数据段、以及结果的存放位置,有的函数还作为对象参数传递给另一个函数,实现数据的处理。 这些算法可以操作在多种容器类型上,所以称为“泛型”,泛型算法不是针对容器编写,而只是单独依赖迭代器和迭代器操作实现。 2.分类 1、非修改式序列操作:不改变容器的内容,如find()、for_each()等。 2、修改式序列操作:可以修改容器中的内容,如transform()、random_shu...

2021-11-22 02:36:04 784

原创 C++学习之第十九天-STL之迭代器

1.定义: 迭代器(iterator)模式又称为游标(Cursor)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。 或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素。2.迭代器产生的本质。 Iterator类的访问方式就是把不同集合类的访问逻辑抽象出来,使得不用暴露集合内部的结构而达到循环...

2021-11-21 11:26:05 1119

原创 C++学习之第十八天-STL无序关联式容器-unordered_set、unordered_map

1.知识点 无序关联式容器:底层实现使用哈希表。无序关联式容器中的元素没有顺序,针对于自定义类型需要自己定义std::hash函数与std::equal_to函数1.unordered_set //1、key值是唯一的,不能重复 //2、key值是没有顺序的2.unordered_multiset //1、key值是不唯一的,可以重复 //2、key值是没有顺序的3.unordered_map //1、key值是唯一的,不能重复 //2、key值是没有...

2021-11-20 20:23:56 821

原创 C++学习之第十八天-STL有序关联式容器-set、map

关联式容器—set、multiset、map、multimap知识点总览1.关联式容器: 底层实现使用红黑树。初始化、遍历、查找(count,find)、插入(insert)(set与map需要判断插入是不是成功),自定义类型需要去对Compare进行改写(std::less、std::greater、函数对象)。2.set1、不能存放关键字key相同的元素,关键字必须唯一2、默认以升序进行排列3、底层实现是红黑树--不支持进行数据修改,不支持下标访问4...

2021-11-20 19:41:22 610

原创 C++学习之第十七天-再探文本查询-实现与、或、非查询方法

代码的实现基本是手敲一遍C++ Primer5 15.9文本查询再探,进一步巩固,继承、抽象基类、虚函数等等知识点。面向对象程序设计基于Day14天的文本查询进行扩展:TextQuery类:该类中有个query查询操作,返回一个结果存在QueryResult中QueryResult类:保存一个单词的查询结果:单词、行号集合、句子集合1.Query_base_抽象层,提供抽象接口。虚函数eval:接受一个TextQuer...

2021-11-17 23:10:48 992

原创 C++学习之第十六天-STL序列式容器-vector,deque,list

序列式容器-vector/deque/list1.序列式容器-vector/queue/list三种主要构造方式与四种遍历方式。知识点:​ 1.三种容器的初始化方式都是一样的​ 2.vector/deque可以支持下标运算符访问,list不允许,list容器里面没有重载[]运算符。vector容器的三种构造函数vector容器构造函数:--plus deque和list,构造函数源码基本差不多。1.vector( size_type count, ...

2021-11-16 00:51:21 1567

原创 C++学习之第十五天-模板与泛型编程

知识点总结1.函数模板-泛型编程,类型参数化:template<typename/class T>,typename和class效果一样 1.T是一个通用的数据类型,告诉编译器如果下面紧跟着的函数或者类中出现T,不要报错2.模板的使用 1.自动推导类型,编译器必须推导出一致的T数据类型,才能正常使用函数模板。 2.显式指定模板类型:mySwap<int>(a,b) 3.模板不能单独使用,...

2021-11-15 20:53:36 1436

原创 C++学习之第十四天-智能指针shared_ptr的应用-文本查询

代码实现基本是手敲一遍Primer C++第五版12.3文本查询程序设计,写一遍来进行学习巩固。文本查询程序类的定义TextQuery类1.提供一个istream,来读取输入文件。2.提供一个query操作,接受一个string,返回一个QueryResult对象来表示String出现的那些行。3.考虑QueryResult对象共享数据的要求,QueryResult类保存单词关联的行号set 1.三个数据成员:1.要查询的单词 2.单词所对应行号set的智能指针 3.句子...

2021-11-13 19:32:48 1716

原创 C++学习之第十三天-智能指针

知识点总结:1.引出: 如何智能指针自动关闭文件指针-代码实现2.通用智能指针进行资源管理RAII-重载解引用运算符*和 -> 运算符,用于托管new出来的对象的释放。---代码实现3.C++四种智能指针:auto_ptr, unique_ptr, shared_ptr,weak_ptr. 1.auto_ptr有bug,已被弃用 2.unique_ptr-不会让多个对象拥有同一资源,不允许进行拷贝构造、赋值,支持移动语义 3.share...

2021-11-12 22:15:41 692

原创 C++学习之第十三天-移动语义与完成COW String类

1.如何区分左值、右值、左值引用、右值引用、const左值引用。String(const char *);String(const String &);~String();问题:临时对象的构造和析构带来了不必要的资源拷贝解决:右值机制-可以在语法层面识别出临时对象,在使用临时对象构造新对象时(即拷贝构造),将临时对象的所有资源都转移到新的对象中,能消除这种不必要的拷贝。左值和右值:1.能对表达式进行取地址的为左值,否则为右值;左值和右值都针对表达式而言的。2.左值是指表达式结束

2021-11-12 17:47:43 949

原创 C++学习之第十二天-虚函数、纯虚函数

知识点总结1.动态多态被激活的五个条件--重要1.基类定义虚函数2.派生类重写该虚函数3.创建派生类对象4.基类的指针指向或者引用绑定到派生类的对象5.基类用指针或者引用来调用虚函数2.对虚函数进行访问的五种方式1.通过指针来访问 >使用指针访问虚函数时,编译器根据指针所指对象的类型决定要调用哪个函数(动态联编),而与指针本身的类型无关。 2.使用引用访问虚函数 >与使用指针访问虚函数类似,表现出动态多态特性。 >不同的是,引用...

2021-11-11 23:11:37 785

原创 C++学习之第十一天之快速排序

//给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2] 示例 2:输入:nums = [2,0,1]输出:[0,1,2] 示例 3:输入:nums = [0]输出:[0] 示例 4:输入:nums = [1]输出:[1]...

2021-11-09 15:43:18 283

原创 C++学习之第十一天-合并两个有序数组

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6] 示例 2:输入:nums1 = [1...

2021-11-09 15:39:16 598

原创 C++学习之第十一天-逆波兰表达式求值

//根据逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入:tokens = ["2","1","+","3","*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入:tokens = ["4","13","5","/","+"]输出..

2021-11-09 15:34:51 416

原创 C++学习之第十一天-多态、虚函数

一、选择题1、下列关于动态联编的描述中,错误的是(D)。A.动态联编是以虚函数为基础B.动态联编是运行时确定所调用的函数代码的C.动态联编调用函数操作是指向对象的指针或对象引用D.动态联编是在编译时确定操作函数的3、在派生类中重新定义虚函数时必须在(A,B,E)方面与基类保持一致。(多选题)A.参数个数 B.参数类型 C.参数名字 D.操作内容 E.返回类型5、C++类体系中,能被派生类继承的是(B)。A.构造函数 B.虚函数 C.析构函数 D.友元函数6、关于虚.

2021-11-09 15:30:42 2443

原创 C++学习之第十天-实现文本查询

作业第5题、文本查询该程序将读取用户指定的任意文本文件【当前目录下的china_daily.txt】,然后允许用户从该文件中查找单词。查询的结果是该单词出现的次数,并列出每次出现所在的行。如果某单词在同一行中多次出现,程序将只显示该行一次。行号按升序显示。要求:a、它必须允许用户指明要处理的文件名字。b、程序将存储该文件的内容,以便输出每个单词所在的原始行。 vector<string> _lines;c、它必须将每一行分解为各个单词,并记录每个单词所在的所有行。在输出行号时..

2021-11-07 23:04:12 975

原创 C++学习之第十天-继承

一、选择题下面叙述错误的是(A)A.基类的protected成员在派生类中仍然是protectedB.基类的protected成员在public派生类中仍然是protected的C.基类的protected成员在private派生类中是private的D.基类的protected成员不能被派生类的对象访问解析:权限运算规则:public > protecetd > private(继承方式 与 基类中权限 )取交集 = 派生类中权限2、下列对派生类的描述中,

2021-11-07 22:53:52 2376

原创 C++学习之第九天-自动释放单例模式

编程题1、实现单例模式的自动释放(4种方式)1.1友元类实现单例模式的释放。知识点:要实现自动释放,可以考虑用一个栈对象,一个类在栈上创建一个对象,在程序执行结束后,栈对象空间被自动释放,会去调用该类的析构函数。把释放单例模式指针的代码放在该类中就可以实现自动释放。#include <iostream>using namespace std;class AutoRelease;//1.要在单例模式中作为友元,所以先进行声明class Singlet...

2021-11-04 18:49:09 1400

原创 C++学习之第八天-解析RSS文件

1、使用tinyXml2解析RSS文件,并生成一个网页库pagelib.dat。tinyXml2 -- https://github.com/leethomason/tinyxml2rss -- https://coolshell.cn/feed -- http://www.runoob.com/rss/rss-tutorial.html正则表达式 进行过滤参考接口:struct RssItem{ string title; string...

2021-11-03 21:15:19 1485

原创 2.二进制中1的个数

思路:用num&(num-1)每次可以消去二进制的一个1,写个循环即可。#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;#include <time.h>#include <bitset>class Solution{public: int cout_Number_bit(int num) { int i = 0; while (nu.

2021-11-02 15:44:31 87

原创 1.数组中出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。思路:1.用栈的括号匹配思想。2.遍历数组元素,如果栈为空,直接入栈;3.如果栈不为空,对比栈顶元素和当前元素,如果当前元素与栈顶元素相同,则入栈;否则弹出栈顶元素。4.遍历结束后,继续判断: 1.如果数组长度是偶数:栈不为空,栈顶元素即为超过数组长度一半的数;...

2021-11-02 15:40:17 175

原创 C++学习之第七天-友元与运算符重载

一、选择题1.关于友元的描述中,(A) 是错误的。A.友元函数是成员函数,它被说明在类体内B.友元函数可直接访问类中的私有成员C.友元函数破坏封装性,使用时尽量少用D.友元类中的所有成员函数都是友元函数2.下面对于友元函数描述正确的是(C)。A.友元函数的实现必须在类的内部定义B.友元函数是类的成员C.友元函数破坏了类的封装性和隐藏性D.友元函数不能访问类的私有成员3.下列的各类函数中,(C)不是类的成员函数。A. 构造函数 B. 析构函数 C. 友元函数 D. 拷...

2021-11-02 14:12:13 1001

原创 C++学习之第六天-统计圣经文本的词频

二、编程题--统计圣经出现的单词以及词频。1、统计一篇英文(The_Holy_Bible.txt)文章中出现的单词和词频,输入:某篇文章的绝对路径输出:词典(词典中的内容为每一行都是一个“单词 词频”)词典的存储格式如下:| a 66 || abandon 77 || public 88 || ...... ||_________________|struct Record{ string _word; int

2021-11-01 14:13:16 1104

原创 C++学习之第五天-new、delete和内存对齐

一、选择题1、执行以下程序char *str;cin >> str;cout << str;若输入abcd 1234,则输出(D)A. abcd B. abcd 1234 C.1234 D. 输出乱码或错误str是一个char*型指针,未初始化,是一个野指针。所以往该地址输入会coredump;2、执行以下程序char a[200];cin.getline(a, 200, ' ');cout <...

2021-10-30 21:55:40 972

原创 C++学习之第四天-类成员的初始化、赋值运算符函数

一、简答题1.当定义类时,编译器会为类自动生成哪些函数?这些函数各自都有什么特点?定义类的时候,编译器自动给类生成默认的默认无参构造函数、拷贝构造函数、析构函数、赋值运算符函数。解答:1.构造函数: 1.名字与类名相同,若程序员在类中自定义了有参构造函数和拷贝构造函数,默认构造函数也得自定义。 2.实例化对象的时候自动调用,用于初始化成员数据,没有返回值,也没有返回类型。 3.可以发生构造函数重载。2.析构函数: 1.类名前面加~,在对象销毁的时候自动调...

2021-10-30 00:28:04 1031

原创 C++学习之第三天-构造函数和析构函数的执行顺序

Day3-构造函数和析构函数1.知识点总结:共同点:a.在类中如果没有提供这两个函数,系统默认给这两个函数提供空实现。b.构造函数和析构函数必须声明在类全局的作用域(public)之下,否则外界是访问不到的c.构造函数没有返回,也不用写void(1)构造函数---作用:初始化数据成员。 1.函数名与类名相同,可以有参数,可以发生重载 2.实例化对象时,由编译器自动调用一次,不需要手动调用 3.如何使用构造函数对数据成员进行初始化,注意初始化和赋值的区别。 ...

2021-10-28 23:58:47 1520

原创 C++学习之第二天-C/C++混合编程-extern C

一、选择题1、在(C、E)情况下适宜采用inline定义内联函数。(多选题)A、 函数体含有循环语句B、 函数体含有递归语句C、 函数代码少、频繁调用D、 函数代码多、不常调用E、 需要加快程序执行速度二、简答题1.如何判断一段程序是由C 编译程序还是由C++编译程序编译的?在编译阶段,C++编译程序会根据函数的类型、参数列表、返回值的不同更改程序中的函数名,这也是C++支持函数重载的原因;而C语言在编译阶段不会对函数名作处理,该是怎样就怎样,因此不支持函数重...

2021-10-27 20:50:25 410

原创 C++学习之第一天-const和宏定义、引用

一、选择题1、在C++中执行以下4条语句后输出rad值为:(C)static int hot=200; int &rad=hot;hot = hot + 100; cout<< rad << endl; A、100 B、200 C、300 D、400二、简答题 const关键字与宏定义的区别是什么? 答:1.用宏定义的常量,在预处理阶段会被直接展开,在编译阶段没有检查机制,如果有bug,在运行的时候才会检查出来。

2021-10-26 22:46:43 980

原创 1.Python小工具-搜索某个文件夹里的所有mp4文件,把搜索到的文件统一移动到指定的目录。

经常在油管上批量下载视频,但是下载下来的每一个视频都有一个父目录,每次下完都得把视频重新全部拉出来,为了偷懒,写了这个代码-比较简单,解脱双手。import shutilimport os"""搜索指定文件夹下的所有mp4文件,把搜索到的视频文件全部移动到指定的位置"""path = r"E:\C++\Cpp"#搜索某个文件夹下的所有mp4文件move_path = r"E:\C++\Linux Mp4" #把搜索出来的mp4移动到的位置if os.path.isdir(...

2021-10-19 15:07:18 1214 3

空空如也

空空如也

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

TA关注的人

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