自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 泛型算法和函数对象

所用头文件:algorithm,functional一、泛型算法二、函数对象

2022-01-24 15:43:08 396

原创 0-1背包问题

问题描述 有n个物品,每个物品都有各自的体积和价值,现有给定容量的背包,如何装物品使背包里的物品具有最大的价值总和?动态规划原理假设此时有4个物品,背包的容量为8number = 4,capacity = 8每个物品的体积和价值如下:i 1 2 3 4 体积(w) 2 3 4 5 价值(v) 3 4 6 5 动态规划主要要搞清楚的两个问题 1.状态表示,即 f [ i , j ] 表示的...

2022-01-20 13:47:48 238

原创 与shell相关的命令介绍

1.case语句#!/usr/bin/bashecho "input passwd"read linecase "$line" in [yY][eE][sS] | [yY] ) echo "this is yes";; no ) echo "this is no";; * ) echo "this is ***";;esac2.函数#1.函数的基本形式,与C语言函数形式基本相同,但是没有返回值#$?代表最后一行语句的执行结果是为真还是为假fun(){

2022-01-19 18:52:22 627

原创 Shell脚本

一、概述一般以.sh文件后缀来代表某个文件是个脚本文件 脚本文件是文本文件,所以不能直接执行,所以需要解释器,目前最好用的解释器之一bash java语言是跨平台的,.java--->.class, .class文件通过java虚拟机来解释执行 java虚拟机:其实就相当于main.exe一个可执行文件,专门来解释执行.class的 java相对于C/C++效率低的原因,因为C/C++可以直接产生.exe文件执行,java必须借助java虚拟机来执行。 解释型与编译型的区别(面试):解.

2022-01-12 20:39:58 283

原创 Linux-------事务(面试常问)

一、事务1.什么是事务,为什么需要事务所谓事务,是一个操作序列,这些操作要么执行,要么都不执行,它是一个不可分割的工作单位。为什么需要事务?例如:银行转账的问题,从一个账号扣款并使另一个账号入账,这两个操作要么都执行,要么都不执行。所以,应该把它们看成是一个事务。2.事务四大特性原子性:略 一致性:数据库总是从一个一致性的状态转换到另一个一致性的状态。 隔离性:略 持久性:一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。3.隔离级别

2022-01-08 13:21:11 495

原创 C++第一节

1.引用引用必须初始化,没有空引用 常引用int main(){ int a = 10; const int b = a; //常引用 b += 10; return 0;}int main(){ const int a = 10; int &b = a; //编译不通过,能力扩张了 return 0;}2.内联函数在C++中,未来解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline

2022-01-07 19:03:15 337

原创 菱形继承与虚继承

菱形继承class A{public: int a; int funa() { cout << "A::funa()" << endl; }};class B :public A{public: int b; int funb() { cout << "B::funb()" << endl; }};class C :public A{public: int c; int func() { cou.

2021-11-18 20:08:24 313

原创 Linux文件传输(项目)

在两台计算机之间(客户机与服务器),能进行文件的传递,客户端连接到服务器之后,要能完成三件事客户端要能查看服务器下的某个文件,删除文件,新建文件 客户端下载文件到本地 上传文件到服务器这些事不是客户端完成的,而是客户端给服务器发送命令,服务器收到命令后自己进行相应的操作...

2021-11-17 09:51:39 1965

原创 动多态与RTTI

复习内容什么是多态?(1)静多态:编译时期的多态,有被称为早绑定 代表:函数重载,模板(2)动多态:运行时期的多态,又被称为晚绑定 代表:继承中的多态 动多态的产生条件:指针或引用调用虚函数+对象必须完整 完整对象:构造函数执行完毕,析构函数还没开始class Base { public: Base() { this->fun(); } virtual void fun() { cout ...

2021-11-12 19:50:23 641

原创 C++继承

类与类之间的关系嵌套:一个类中声明了另一个类------一个类是另一个类的一部分class B{public: class A {}; A a;};//访问A时要通过B的作用域代理:一个类的接口是另一个类的子集------一个类的功能需要依赖另一个类的功能实现 继承:一个类是另一个类的一种class Fish{public: string _name;};class GoldFish:public Fish //继承{public:

2021-11-12 17:05:50 590

原创 C++模板

模板的基本用法template<typename T>bool compare(T a, T b){ return a > b;}int main(){ compare<int>(10, 20); compare<double>(10.2, 20.3); return 0;}传入的参数类型是在什么时候替换进去的,如何替换的? 模板是不可以直接运行的 函数模板会在编译期根据使用情况生成对应的函数 模板不编译,但是模板生成的函数指令.

2021-11-06 16:09:43 502

原创 2021-10-29

系统调用堆上内存-------属于外部资源 申请、释放外部资源-------用户态没有权限,内核态有权限 堆上的内存申请和释放的过程需要内核态完成-------从用户态切换到内核态 系统调用(cout,printf,cin,scanf)内存池内存池------用户态自己维护的一大段内存 重载new和delete相当于留下了一个可修改的端口,可以指定内存的申请和释放的内存池 C++自带的内存池_Allocnew和delete的重载class Tmp{public: Tmp()

2021-10-29 19:47:51 54

原创 C++迭代器

迭代器的基本用法int main(){ string str1 = "123456"; string::iterator it = str1.begin();//iterator为string中的一个类型,定义了it这个对象 while ( it != str1.end()) { cout << *it << " "; it++; } cout << endl; return 0;}迭代器的作用为了通用,因为C++中有很多的内数据类

2021-10-29 10:09:34 89

原创 C++运算符重载

双目运算符重载等号运算符重载如果不自己实现,系统会自己生成一个 其他的运算符重载,如果需要使用的话,必须自己实现class Complex{public: Complex(int a, int b) { _a = a; _b = b; } //可以根据需要来选择是否要实现拷贝构造函数,析构函数等 Complex operator+(const Complex& src)//加号运算符重载,-、*、/、&&、||与这个类似 { int a = _.

2021-10-20 11:17:11 52

原创 C++友元

友元类class Node{public: Node(int val = int()) { _val = val; _next = NULL; _pre = NULL; } friend class List;//友元类,即List中可以访问Node的私有成员private: int _val; Node* _next; Node* _pre;};class List{public: List(); List(const List& src);

2021-10-15 21:07:39 54

原创 关于类型的小知识

#include<iostream>using namespace std;int main(){ int a = int(10); //调用整形类型的构造函数 cout << a << endl; //10 int b(10); //构造函数 cout << b << endl; //10 int c = int();//调用整形类型的默认构造函数 cout << c << endl; //0 i.

2021-10-15 19:16:37 48

原创 C++静态成员

静态成员变量一个类只有一个 存储在数据段 静态成员变量只能在类外的.cpp进行初始化,且只能初始化一次 静态成员变量的访问可以不依赖于对象(不依赖this指针),使用类的作用域可以直接访问class Person{private: int _age; int _sex; char* _name; public: static int num; //静态成员变量 Person() { num++; //统计人数 cout << "Person(

2021-10-13 13:42:14 64

原创 C++的公有与私有

C语言中struct 默认是公有成员,C++中class 默认是私有成员 private:除了类内部之外都不可以使用 public:对外暴露的,外界会具有读写操作权限权限选择:必须要对外界提供的,放在public,其余的都放在privateclass Person{private: int _age; int _sex; char* _name; //这三个成员属性默认为私有,但可以通过函数接口去使用它们public: Person() { cout <&lt...

2021-10-13 12:16:32 3229

原创 C++构造函数,析构函数以及浅拷贝

构造函数当进行构造对象的时候默认调用的成员方法 如果没有实现构造函数,系统会生成一个默认构造函数 当自己实现了构造函数之后,系统就不会生成默认构造函数了 默认构造函数:除了this指针以外没有其他参数的构造函数 在调用默认构造函数时,不带括号,与定义对象的形式的一致。例如:Person p1;//ok Person p1();//error为什么要引入构造函数?如果在创建一个对象时,要给它赋初值,如果给一个对象赋值,很容易,可如果要给多个对象赋值,就得一个一个的来,比较费时,所以..

2021-10-08 20:57:00 161

原创 C++的this指针

问题引入class Person{public: int _age; int _sex; char* _name; void work() { cout << _name << " work ." << endl; } void eat() { cout << _name << " eat." << endl; }};int main(){ Person p1; Person p2

2021-10-08 18:13:47 58

原创 C++动态开辟内存

C与C++动态开辟内存的区别C语言使用的是malloc开辟空间,free释放空间,而C++使用的是new开辟空间,delete释放空间 C用malloc开辟完后,要判空,C++使用new开辟后不用判空,如果开辟不成功,会程序异常动态开辟int main(){ int* p = new int;//开辟一个int类型的空间 *p = 10; delete p; //释放p所指向的空间 return 0;}int main(){ int*.

2021-10-06 19:24:01 364

原创 C++引用

引用的底层是指针 在使用到引用的地方,编译期会自动替换成底层指针的解引用int main(){ int a = 10; int& b = a; //lea eax,[a] //mov dword ptr [b],eax int* p = &a; //lea eax,[a] //mov dword ptr [p],eax b = 20; //mov eax,dword ptr [b] //mov dword ptr [eax],14h *p

2021-10-06 18:56:26 43

原创 C++中的常量与变量

指针与数组//text.cppint arr[5] = { 1,2,3,4,5 };//main.cppextern int* arr;int main(){ int ar[3] = { 1,2,3 }; cout << arr <<endl; //打印出00000001 输出的为数组的第一个元素,为什么呢?因为在main.cpp中是按指针引用了,此事得arr是一个指针变量,变量在取值时都会进行一次解引用,所以将arr这个地址中的值取了出来,所以输出的结果为1

2021-10-06 15:22:15 211

原创 C++的命名空间的简单使用

//tmp.cppnamespace A{ typedef int INT; typedef char CHAR;}//main.cppusing namespace A;//将命名空间的全部内容都引进来使用//using A::INT; 只引用命名空间A中的INTint main(){ INT a = 10; cout << a <<endl; return 0;}...

2021-10-06 11:37:18 38

原创 C++函数默认值参数

函数默认值参数是在调用函数没有给实参时,将函数的默认值参数传递给形参 函数的默认值参数是在编译期生成指令时,直接生成入参指令,前提是调用函数时没有给实参,默认值参数只能传递常量 函数的默认值参数只能从右往左依次赋值,不能跳过 函数的默认值参数在同一作用域只能赋值一次。因为默认值参数在生成指令,不可能直接生成两条入参指令,否则,将乱套了 因为函数参数的默认值是在编译期带入的,所以函数参数的默认值只在本文件内有效,编译是针对单文件而言的int fun(int a, int b, int c){..

2021-10-06 10:29:07 490

原创 联合体Union

基本概念在联合体中,各成员共享一段内存空间 在结构体中,各成员有各自的内存空间,可以为每一成员赋值,而在联合体中,为一个成员复制之后,如果在为另一个成员赋值,前一个内存值将不复存在无名联合体​union { short st; char cs[2];}x; //x为联合体变量,只不过此联合体无名int main(){ printf("%d\n", sizeof(x)); //输出结果为2 return 0;}​联合体​union UnData{ short

2021-10-04 18:08:03 54

原创 希尔(Shell)排序

算法思想根据直接插入排序的特点,当数组中的值越有序,速度也就越快,所以希尔排序实际上是根据这一思想,每次将数组分成几组,对每组进行直接插入排序,每组的数据会越来越有序,整体的数组中的值也就会越来越有序 将数组的元素按一定的规律分组,可以降低时间复杂度,比如可以先分为五组,每组排序好之后,再分为三组,每组排序好之后,再分为1组。最后一次一定要分为一组,才可以将全部数据都排好序举例说明相同背景颜色的为一组原始数据 78,62,6,90,34,9,23,67,98,45,53,27,71,1

2021-10-04 12:02:03 63

原创 指针变量与const

1.限制指针变量本身int main(){ int a = 0; int b = 1; int *const p = &a;//限制指针变量本身,即指针变量不可改变,也就是说指针指向不可改变,所以在定义时必须初始化 p = &b;//错误 *p = 1;//ok return 0;}2.限制指针变量指向的数据int main(){ int a = 0; int b = 1; const int *p

2021-10-03 19:21:46 54

原创 二路归并排序

基本思想:将两个或两个以上的子序列合并成一个子序列 一般是每次将两个子序列合并到一起,所以一般也叫二路归并排序 直到合并为一个子序列停止,此时便有序了举例说明:不同颜色代表不同的组原始数据 45,56,42,5,8,23,51,89,80,7,4 第一次归并(一一归并) 45,56,5,42,8,23,51,89,7,80,4 第二次归并(二二归并) 5,42,45,56,8,23,51,89,4,7,80 第三次归并(四四归并) 5,8,23,42,4

2021-10-03 11:49:04 274

原创 堆排序::

预备知识:大顶堆:每一个父节点的值大于子节点 小顶堆:每一个父节点的值小于子节点 二叉树的基本概念:略 将二叉树存储在一维数组中,并且可以找到每个节点所对应的值 通过父节点的下标推出子节点的下标:假设父节点的下标为 i,他的左孩子的下标为2*i+1,右孩子的下标为2*i+2 通过子节点的下标推出父节点的下标:假设子节点的下表为 i,它的父节点的下标为 (i - 1)/ 2算法思想:将一维数组中的值想象成二叉树,然后将其调整为大顶堆。为什么要调整为大顶堆?每次调整完之...

2021-10-02 16:37:09 44

原创 简单选择排序

排序思想:升序排序:每次从待排序序列中找出一个最小值与第一个待排序序列中的第一个数交换降序排列:每次从待排序序列中找出一个最大值与第一个待排序序列中的第一个数交换举例说明:蓝色背景为待排序序列待排序序列 8,1,3,7,9,5,6 第一趟排序 1,8,3,7,9,5,6 第二趟排序 1,3,8,7,9,5,6 第三趟排序 1,3,5,7,9,8,6 第四趟排序 1,3,5,6,9,8,7 第五趟排序 1,3,5,6,7,8,9

2021-10-02 11:07:53 41

原创 快速排序----------改进的交换排序

交换排序有两种,第一种是我们熟悉的冒泡排序,在此处省略不提,第二种就是我们本文章提到的快速排序,它是一种改进的交换排序基本思想:任取一个元素(第一个)为中心 所有比它小的元素放到它前面,所有比它大的元素一律放后面,形成左右两个子表 对各子表重新排序选择中心元素并以此规则调整 直到每个子表中只剩一个举例说明:紫色标记的为中心值 ,红色标记的为已经确定位置的值原数组值 45,63,87,26,10,58,79,90,46,72,45' 第一趟排序结果 10, ...

2021-10-01 20:14:22 55

原创 插入排序:

基本思想:每一次将待排序的对象,按其关键码的大小,插入到前面已经排好序的一组对象的合适位置上,直到全部对象插入为止,即边插入边排序基本操作:在有序序列中插入一个元素,保持序列有序,有序长度不断增加 起初,a[0]是长度为1的有序序列,然后,逐步将a[1]至a[n-1]插入到有序序列中 再插入a[i]前,数组的前半段(a[0] - a[i-10])是有序段,a[i] - a[n-1]是待插入的无序段 插入a[i]使a[0]-a[n-1]有序,也就是要为a[i]找到有序位置j(0<=j.

2021-10-01 17:18:36 42

原创 C和C++的区别

1.1函数的区别1.函数默认值参数:在函数声明或者定义的时候,给定参数默认值,如果实参传递时,不给该形参传递,则会按照该默认值传参2.函数参数的默认值是在编译期(把代码翻译成指令)生成指令的时候,直接生成入参指令3.函数参数的默认值只能传递常量。为什么不能传递变量?int data = 10;int fun(int a,int b,int data)//错误,变量在编译时期是不能获取到真实值,只有在运行时期可以拿到变量的值{ cout<<a<<endl;.

2021-10-01 10:22:43 140

空空如也

空空如也

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

TA关注的人

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