笔记
文章平均质量分 57
qx LIU 2000
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++初阶--vector模拟实现
今天我们不直接上代码了,我们先来分析一下vector这个容器。我们来看看这个东西vector<vector>这我们可以大概猜到是一个二维数组。但并不完全是,二维数组是一个n*n 的矩形结构,而这里的vector套vector可不是这样,我们来剖析一下它当我们执行vv [ i] [ j ] 这行代码时首先执行 vv. operator [ i ],也就是vv [ i ] 这时候我们在一个大vector中找到了,很多很多的vector。每一个vector 是用i 控制的,一原创 2021-07-29 20:27:11 · 706 阅读 · 0 评论 -
C++初阶--vector前传--剖析迭代器失效
vector中的迭代器失效问题今天我们来看看迭代器失效的主要原因与解决方法首先我们要了解到,迭代器对于vector阶段来说,我们完全可以把它看成一个指针来理解。我们先来简单实现一下:首先有一个重定义:typedef T* iterator ;就是定义一个指针类型iterator begin(){ return _start;}这不就是一个简单的迭代器吗?当然这是一个普通容器,当然还有const版本,我们这里不深入说了。我们在正式开始主题前,先看一个小问题:原创 2021-07-29 20:12:03 · 417 阅读 · 1 评论 -
C++初阶--string的深入理解及补充
模拟实现完成了string,今天我们来深度理解一下string目录:第一块:有关const修饰函数的问题第二块:有关string实现方案的问题第一块:有关const修饰函数的问题首先我们先对string下一个定义:string 是一个管理字符数组的类,并且这个字符数组的结尾要用‘\0’进行标识。我们主要了解了以下的几个有关string的内容拷贝构造和赋值运算符重载的深拷贝增删查改等相关接口重载了一些常见的运算符迭代器之前有一个不太容易理解的点:第一组:size_t size()原创 2021-07-26 20:54:32 · 343 阅读 · 0 评论 -
C++初阶--string模拟实现
string实现第一部分:默认成员函数的基本接口以及深浅拷贝相关问题。第二部分:string增删查改等功能模拟实现第一部分:默认成员函数的基本接口以及深浅拷贝相关问题。#pragma once#include <iostream>using namespace std;namespace lqx{ class string { public: 构造函数 string(const char* str = "") :_str(new char[strlen(str原创 2021-07-23 20:45:18 · 468 阅读 · 0 评论 -
二刷C++--深入理解基础特性篇
深入理解C++基本特性一、函数重载1.1 函数名修饰规则补充:编译链接过程二、引用一、函数重载函数重载是什么呢?概念:函数名相同,参数不同(类型、个数、顺序)为什么C++支持函数重载,而C语言显然不支持呢?那就得提到另一个概念:函数名修饰规则1.1 函数名修饰规则补充:编译链接过程一个程序运行起来,首先要有几个基本的过程:预处理、编译、汇编、链接。我们今天来简单回顾一下这几个过程发生的事情。上一个小小的图:预处理:将所有的#define 删除,并展开所有的宏定义。处理所有的条件原创 2021-07-19 22:22:26 · 226 阅读 · 0 评论 -
C++初阶--模板
c++模板1. 泛型编程2. 函数模板2.1 函数模板的概念2.2 函数模板的原理2.3 函数模板的实例化2.5 模板参数的匹配原则3. 类模板3.1 类模板的定义格式3.2 类模板的实例化1. 泛型编程用C语言实现交换函数是不是只能这样呢?使用函数重载虽然可以实现,但是有以下几个不好的地方:重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型的出现时,就需要增加函数代码的可维护性比较低,一个出错可能所有的重载均出错。2. 函数模板2.1 函数模板的概念函数模板代表了一个函数原创 2021-06-20 22:12:46 · 350 阅读 · 3 评论 -
C++初阶--内存管理
C++——内存管理1. c/c++内存分布2. C语言中动态内存管理方式2.1 malloc /calloc/realloc和free3 . c++内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作符自定义类型1. c/c++内存分布栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈向下生长。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信。堆用于程序运行时的动态内存分配,堆向上增长。数据段–存原创 2021-06-17 15:30:47 · 782 阅读 · 1 评论 -
C++初阶--类和对象(下)
类和对象(下)1.再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字2 . static 成员2.1 概念2.2 特性3. c++11的成员初始化新玩法4. 友元4.1 友元函数4.2 友元类5 . 内部类5.1 概念及特性1.再谈构造函数1.1 构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作类对象成员的初始化,构造函数体中的语句只能将其称作为赋初值,而原创 2021-06-15 20:57:39 · 499 阅读 · 4 评论 -
C++初阶--类和对象(中)
类和对象(中)1.类的6个默认成员函数2.构造函数2.1 概念2.2 特性3.析构函数3.1 概念3.2 特性4. 拷贝构造函数4.1 概念4.2 特征5. 赋值运算符重载5.1 运算符重载5.2 赋值运算符重载三级目录1.类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。class Date{};2.构造函数2.1 概念构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编原创 2021-06-04 00:37:23 · 360 阅读 · 0 评论 -
C++ 日期类的实现
Date.h#define _CRT_SECURE_NO_WARNINGS 1#pragma once#include <iostream>#include <assert.h>using std::cout;using std::cin;using std::endl;//class Date//{//public:// //1.无参构造函数// Date()// {}//// //2.带参构造函数// Date(int year, int mo原创 2021-06-03 23:02:13 · 340 阅读 · 0 评论 -
C++初阶--类和对象(上)
类和对象(上)1.面向过程和面向对象初步认识2.类的引入3. 类的定义4. 类的访问限定符及封装4 .1访问限定符4.2 封装5.类的作用域6.类的实例化1.面向过程和面向对象初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事拆分为不同的对象,靠对象之间的交互完成。举例:外卖系统面向过程:下单、接单、送餐等过程面向对象:客户、商家、骑手等对象。2.类的引入c语言中,结构体中只能定义变量,在c++中,结构原创 2021-05-24 18:25:16 · 315 阅读 · 5 评论 -
C++初阶 --入门基础中的基础语法
C++入门1. C++关键字2. 命名空间2.1 命名空间的定义命名空间的使用3.C++输入&输出4.缺省参数(备胎)4.1缺省参数概念4.2缺省参数分类函数重载函数重载的概念5.2 名字修饰5.3 extern"C"一级目录两个二级目录三级目录1. C++关键字C++共计63个关键字,C语言32个关键字2. 命名空间在C\C++ 中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地原创 2021-05-24 17:44:01 · 678 阅读 · 2 评论 -
C++ 初阶 -- 前言
C++前言1. 什么是C++2. C++发展史3. C++重要性1. 什么是C++c语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,c语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言原创 2021-05-19 10:20:56 · 362 阅读 · 1 评论 -
数据结构-排序-计数排序
计数排序–非比较排序首先我们要明白两个概念:绝对映射相对映射我们创建要给count数组,统计出Arr数组每个数出现的次数A[ i ] 的值为多少,就给count对应位置进行操作:count[ A [ i ]]++此时两数组的对应关系叫做 绝对映射。再来看一种情况如果绝对映射的方法创建数组,那么 0-9 个空间就浪费了,所以我们采用相对映射。0代表10,1代表11,2代表12,即为 min+i 则可还原为原数据。完整的代码void CountSort(int* a, int n原创 2021-05-14 02:03:50 · 252 阅读 · 0 评论 -
数据结构-排序-归并排序
归并排序递归算法void _MergeSort(int * a, int left, int right, int * tmp){ if (left >= right) return; int mid = (left + right) >> 1; _MergeSort(a, left, mid, tmp); _MergeSort(a, mid + 1, right, tmp); int begin1 = left, end1 = mid; int begin2 =原创 2021-05-13 17:29:48 · 178 阅读 · 0 评论 -
数据结构-排序-快排
快排算法思想单趟排序:选出一个KEY,一般是最左边的或者是最右边的,把KEY放到他正确的位置上去,左边的比KEY小,右边的比KEY大。左边的值做KEY,则右边的先走。三数取中//三数取中,可以优化有序数列的情况。但当其元素都相等的时候,就无法进行优化。int GetMidIndex(int *a, int left, int right){ int mid = (left + right) >> 1; if (a[left] < a[mid]) { if (a[mi原创 2021-05-11 15:49:45 · 209 阅读 · 0 评论 -
数据结构-排序-冒泡排序
冒泡排序复杂度最坏:O(N^2)最好:O(N)void BubbleSort(int * a, int n){ ////one //for (int i = 0; i < n; i++) //{ // for (int j = 1; j < n - i; j++) // { // if (a[j - 1]>a[j]) // Swap(&a[j - 1], &a[j]); // } //} //two for (int end = n;原创 2021-05-11 15:04:40 · 168 阅读 · 0 评论 -
数据结构-排序-堆排序
堆排序void AdjustDwon(int * a, int n, int root){ int child = root * 2 + 1; while (child < n) { if (child + 1 < n && a[child + 1] > a[child]) { ++child; } if (a[child] > a[root]) { Swap(&a[child], &a[root]);原创 2021-05-10 16:10:24 · 167 阅读 · 0 评论 -
数据结构-排序-选择排序
选择排序void Swap(int* p1,int * p2){ int tmp = *p1; *p1 = *p2; *p2 = tmp;}void SelectSort(int * a, int n){ int left = 0, right = n - 1; while (left < right) { int minIndex = left, maxIndex = right; for (int i = left; i < right; i++) {原创 2021-05-10 15:59:30 · 160 阅读 · 0 评论 -
数据结构-排序-希尔排序
希尔排序1、预排序 ----> 接近有序2、直接插入排序从而在时间复杂度上有很大的提升gap越大,大小数可以更快挪到对应的位置,越不接近有序gap越小,大的和小的数可以更慢的挪到对应的位置,越接近有序gap == 1 为直接插入排序void ShellSort(int* a, int n){ int gap = n; while (gap > 1) { gap = (gap / 3 + 1); for (int i = 0; i < n - ga原创 2021-05-10 15:35:36 · 206 阅读 · 0 评论 -
数据结构-排序-插入排序
插入排序一、思想:直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经拍好的有序序列中,直到所有记录插入完为止,得到一个新的有序序列-------------扑克牌。解释:当插入第 i (i>=1)个元素时,面前的array[0],array[1],…array[i-1] 已经排好序,此时用array[i]的排序码与前面的排序码进行顺序比较,找到插入位置将array[i]插入,原来位置上的元素后移复杂问题拆解:1、先写单趟排序2、再写多趟排原创 2021-05-10 15:14:13 · 223 阅读 · 0 评论
分享