自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL常用算法

算法主要由头文件 algorithm functional numeric组成algorithm是最大的,范围涉及比较,交换,查找,遍历,复制,修改等等numeric体积很小,只包括几个在序列上面进行简单数学运算的模板函数functional定义了一些模板类,用以声明函数对象常用遍历算法for_each 遍历容器开始,结束迭代器,和函数或者函数对象vector<int>v;v.push_back(i);class print2{publi...

2021-03-10 13:48:04 93

原创 函数对象

函数对象重载函数调用操作符的类,对象称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象是一个类,不是一个函数函数对象使用可以像普通函数一样调用,可以有参数和返回值超出普通函数的概念,函数对象可以有自己的状态,具有成员属性class A{public:int operator()(int v1,int v2){return v1+v2;}intb;b是成员属性}A a;cout<<...

2021-03-10 10:43:20 79

原创 map/multimap容器

map中所有元素都是pairpair第一个元素是key键值,索引所用,第二个是value,实值所有元素都会根据元素的键值自动排序本质:map/multimap属于关联式容器,底层结构是用二叉树实现优点:可以根据key值快速找到value值map和multimap的区别,map不允许容器中有重复key值元素multimap允许map的构造和赋值for(map<int,int>::iterator it=m.begin();it!=m.end();it++..

2021-03-09 21:59:28 108

原创 set/multiset容器

set:所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现set和multiset区别:set不允许容器中有重复的元素,multiset允许容器中有重复的元素构造:默认构造,拷贝构造赋值,等号操作符s3=s2插入数据只有insertset<int>s1;s1.insert(10);for(set<int>::iterator it=s.begin();it!=s.end();it++)cout<

2021-03-09 21:18:09 85

原创 list容器

list将数据进行链式存储链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:链表由一系列节点组成结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域链表优点:可以对任意位置进行快速插入或删除元素缺点:容器遍历速度,没有数组快;占用空间比数组大STL中的链表是一个双向循环链表每一个结点有两个指针,指向后面和前面因为链表存储不是连续的内存空间,因此list迭代器只支持前移和后移,属于双向迭代器lis.

2021-03-09 19:20:20 93

原创 queue容器

queue是一种先进先出的数据结构,它有两个出口队头出pop()队尾进push()只有队头和队尾能被外界访问,因此不允许有遍历行为常用接口与stack相似唯一不同有队头队尾,stack只有栈顶队头front队尾back...

2021-03-09 18:26:22 59

原创 stack容器

stack是一种先进后出的数据结构,他只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为stack常用接口构造默认构造拷贝构造赋值等号赋值栈顶添加push移除pop返回栈顶元素top()判断是否为空empty()返回栈的大小size();...

2021-03-09 18:16:34 40

原创 deque容器

deque是双端数据,可以对头进行插入删除操作deque与vector的区别vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度会比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关deque中有中控器存储缓冲区的地址,缓冲区是分开的,空间不够则申请新的缓冲区因为分开,访问速度慢一些deque容器迭代器也是支持随机访问构造函数与vector相似vector替换为deque小知识,如果函数.

2021-03-09 18:01:17 73

原创 vector

vector数据结构和数组非常相似,也称为单端数据不同之处在于vector可以动态扩展动态扩展并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间vector容器的迭代器是支持随机访问的迭代器vector构造函数:创建vector容器vector<int> v1;默认构造无参构造v1.push_back(i);通过区间构造vector<int>v2(v1.begin(),v1.end());v2会复制v..

2021-03-09 16:53:53 82

原创 string容器

string和char*的区别:char*是一个指针string是一个类,类内封装了char*,管理这个字符串,是一个char*型的容器。string类内封装了很多成员方法,string管理char*所分配的内存,不必担心复制越界和取值越界,由类内部进行负责string构造函数string str;创建一个空字符串string(const char* s)使用字符串s初始化string(const string&str)使用一个string对象初始化另一个s...

2021-03-09 15:37:59 55

原创 STL简介

C++面向对象和泛型编程的思想,目的就是复用性的提升为了建立数据结构和算法的一套标准,诞生了STL(标准模板库)STL从广义上分为:容器container算法algorithm迭代器iterator容器和算法之间通过迭代器进行无缝连接STL几乎所有代码都采用了模板类或者模板函数STL六大组件:容器,算法,迭代器,仿函数,适配器(配接器),空间配置器容器:各种数据结构,存放数据算法:常用算法迭代器:容器和算法之间的胶合剂仿函数:行为类似函数,可作为算法的某种策...

2021-03-08 23:54:53 88

原创 模板

C++泛型编程和STL模板是建立通用模具,提高复用性模板不可以直接使用,只是一个框架,通用不是万能C++提供两种模板机制:函数模板和类模板函数模板:建立通用函数,函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表template<typename T>函数声明或定义template声明创建模板TypeName表明后面的符号是一种数据类型,可以用class代替T通用的数据类型,名称可以替换,通常为大写字母例子:template&l...

2021-03-07 21:37:59 76

原创 文件操作

通过文件可以将数据持久化C++对文件操作需要头文件<fstream>文件类型有两种:1.文本文件:文件以文本的ASCII码形式存储在计算机中2.二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂操作文件的三大类:1.ofstream:写操作2.ifstream:读操作3.fstream:读写操作写文件:#include <fstream>ofstream ofs;//创建流对象ofs.open(“文件路径”,打开方式

2021-03-07 18:38:20 94

原创 多态

多态是C++面向对象三大特性之一多态分为两类静态多态:函数重载和运算符重载属于静态多态,复用函数名动态多态:派生类和虚函数实现运行时多态静态多态和动态多态的区别:静态多态的函数地址早绑定——编译阶段确定函数地址动态多态的函数地址晚绑定——运行阶段确定函数地址C++中不要求父子类进行强制类型转换如animal类为父类,cat类为子类,两类中有一同名函数speak()可以进行void do(animal &animal){animal.speak();

2021-03-07 15:02:54 68

原创 继承

继承是面向对象的三大特性之一定义类时,有些类与类之间存在特殊的关系,下级别的成员除了拥有上一级的共性,还有自己的特性,此时可以考虑利用继承,减少重复代码语法:class子类 :继承方式 父类子类也称为派生类父类也称为基类class A{public:void B(){}};class Java:public A//继承{public:void C(){}}继承方式有三种,公共继承public,保护继承protected,私有继承...

2021-03-06 16:34:42 61

原创 运算符重载

运算符重载:对已有的运算符重新进行定义,赋予另一种功能,以适应不同的数据类型加号运算符重载:实现两个自定义数据类型相加的运算可以通过成员函数重载+号关键字operator+person operator+ (person &p);完成函数后person p1;person p2;不必写p1.operator+(p2);只需要 p1+p2;也可以通过全局函数重载+号使用的时候也只需要p1+p2运算符重载也可以发生函数重载即给+赋予更多的对于不同参数.

2021-03-06 14:46:49 119

原创 友元

友元:在程序里,私有属性类外不可访问,如果有些私有属性也想让类外的一些特殊函数或者类访问,就要使用友元友元可以让一个函数或者类访问另一个类中的私有成员关键字为 friend友元的三种实现:全局函数做友元class Building{friend void good(Building &building);//表明该全局函数是友元private:int a;}void good(Building &building){cout<<

2021-03-06 09:20:32 166

原创 类和对象2

深拷贝与浅拷贝浅拷贝:简单的赋值拷贝操作如果被拷贝对象有指针变量,拷贝的指针变量依旧逐字逐句,不会改变,即两个对象将会指向同一块堆区内存如果在析构中存在释放堆区内存的代码,那么先操作的会释放,而后操作的由于该内存已经被释放,找不到,将是非法操作即堆区内存的重复释放深拷贝:在堆区重新申请空间,进行拷贝操作自己实现拷贝构造函数,解决浅拷贝带来的问题举例person(const person &p){ m_age=p.m_age;//int变量没有差别...

2021-03-05 16:09:22 82

原创 一。C++双冒号的作用 命名空间 using的使用 C++与C的不同

双冒号代表作用域,如果只写双冒号表示全局作用域,比如int a;cout<<::a<<endl;

2021-03-05 10:56:21 318 1

原创 类和对象1

C++面向对象的三大特性:封装,继承,多态C++认为万事万物皆为对象,对象上有其属性和行为具有相同性质的对象,我们可以抽象称为类,如人属于人类,车属于车类,人有属性姓名年龄身高,行为有走跑跳等封装:封装的意义:将属性和行为作为一个整体,表现生活中的事物;将属性和行为加以权限控制使用类的语法:创建类:class circle{ //访问权限 //公共权限 public: //类中的属性和行为统一称为成员,属性又称为成员属性,成员变...

2021-02-24 10:56:48 45

原创 函数++

函数默认参数C++函数的形参列表中的形参可以有默认值int func(int a, int b =10,int c =10){}对于默认参数,使用函数可以为func(a),也可以func(a,b,c)将使用传入的值计算而不是默认值1. 如果某个位置有了默认参数,那么从左至右都必须有例如int func(int a, int b=10, int c)//非法2. 如果函数声明有默认参数,函数实现就不能有默认参数int func(int a=10, int b =...

2021-02-18 17:38:59 162

原创 引用

引用本质是给变量起别名语法:int a;int &b=a;操纵ab结果相同,改变了b的值,a的值也会相应的变化,因为此时本质已经一样引用的注意事项:引用必须初始化引用在初始化后,不可以改变如:int a=10;int b=10;int &c;//此为错误,必须指定一个变量作为其初始值int &c=a;//此为正确c=b;//此时c已经是一个变量,操作为将b赋值与它,而不是c作为b的别名使用引用作为函数的参数,会改..

2021-02-17 10:04:20 67

原创 内存四区

在程序运行之前,分为全局区和代码区全局区:全局变量和静态变量存放的地方,还包含常量区,该区域的数据在程序结束后有操作系统释放。全局区中存放的数据:全局变量,静态变量(static),常量——字符串常量和const修饰的全局变量不在全局区中存放的数据:局部变量,const修饰的局部变量(也属于常量)代码区存放代码生成的机器代码0101CPU执行的机器指令代码区是共享的,是只读的,对频繁执行的程序只需要一份,并且防止程序意外的修改了指令栈区由编译器自动分配释放,存..

2021-02-16 14:21:33 81

原创 2021-02-04小技巧

string nameSeed = "ABCDE";for(int i=0; i<len; i++){ tArray[i].tname="Teacher_"; tArray[i].tname+=nameSeed[i];}随机数:srand(1); //设定种子常用种子:srand((unsigned int)time(0/NULL));//有没有null都可以,int也是int random= rand()%61 + 40; //40~100...

2021-02-05 13:56:54 31

原创 指针小知识

指针空指针用于初始化,但不可以进行访问,内存编号0-255为系统占用均不可访问野指针:指针指向非法的内存空间const修饰指针为常量指针const int *p(指针的指向可以更改,指针指向的值不可以更改),修饰常量为指针常量int * const p(指针的指向不可以改,指针指向的值可以改)const int * const p则均不可更改对于arr[10],int *p=arr ; p++;则p指向下一个数组元素...

2021-02-05 13:56:25 48

原创 S-贪心-超市卖货

按价值倒排,从价值高的开始遍历,让先遍历到的在它的deadline卖出,如果deadline被占用,就在deadline前一天卖出,全部遍历完毕后,输出所有记录下的利益的累加和#include &lt;iostream&gt;#include &lt;algorithm&gt;#include &lt;cstring&gt;using namespace std;struct p{ i...

2018-02-22 11:34:54 203

原创 T-贪心-牛奶工厂

用每一周和上一周生产费用加存储费用比较,用小的取代,依次下去即可,最后加上每一周的价格乘数量#include &lt;iostream&gt;#include &lt;cstdio&gt;using namespace std;int main(){ __int64 N,S,C[10005],Y[10005],sum; while(cin&gt;&gt;N&gt;&gt;S) { ...

2018-02-21 12:08:33 245

原创 D - stl 的 map 4

动能定理,物理题。。。就是带公式计算,输出字符串#include &lt;iostream&gt;#include &lt;cmath&gt;using namespace std;int main(){ double G=9.81; double k,l,s,w; while(cin&gt;&gt;k&gt;&gt;l&gt;&gt;s&gt;&gt;w) {...

2018-02-21 11:07:13 126

原创 F-最长公共子序列

有模板的dp。。。。储存时要从第二位开始储存,因为从第一位开始就用了n-1,若以0开始会出现读取数组里-1的元素的问题。。#include &lt;iostream&gt;#include &lt;cstring&gt;using namespace std;char s1[5005],s2[5005];int dp[5005][5005];int Max(int a,int b){...

2018-02-16 20:29:45 160

原创 E-01背包

动态规划,循环每一件物品,从当前与当前的变化中选择更优解,并替换,即可#include &lt;iostream&gt;#include &lt;cstring&gt;#include &lt;cstdio&gt;using namespace std;int Max(int a,int b){ if(a&gt;b)return a; else return b;}struct ...

2018-02-16 18:47:07 159

原创 A-数字三角形

简单的动规,从倒数第二行开始,每一项加上它下面大的那一项,最后输出A【1】【1】即可#include &lt;iostream&gt;using namespace std;int Max (int a,int b){ if(a&gt;b)return a; else return b;}int main(){ int n; while(cin&gt;&gt;n) { i...

2018-02-15 18:16:42 243

原创 R - Joseph

给所有人编号,前一半好人后一半坏人,从第零个开始数,数的时候用取余的方法确定在哪个位置,为前一半则跳出,因为好人不会出去,所以前一半标号永远不变,判断条件也因此不用改变,每次更新取余的人数#include &lt;iostream&gt;using namespace std;int main(){ int p[50]={0},k,j[14]={0}; while(cin&gt;&gt;...

2018-02-15 18:02:28 172

原创 W - The Circumference of the Circle

重点就是求圆的半径通过内接三角形,那么首先需要知道三角形三边长a,b,c,之后有R=a*b*c/4/S,S是三角形的面积,有海伦公式S=sqrt(P*(P-a)*(P-b)*(P-c)),P=(a+b+c)/2#include &lt;iostream&gt;#include &lt;math.h&gt;#include &lt;cstdio&gt;using namespace std;...

2018-02-15 12:56:53 96

原创 P - Reduced ID Numbers

暴力循环过的,不过有个地方,循环从输入组数开始,因为小于它的不可能符合我们的要求#include &lt;iostream&gt;#include &lt;cstring&gt;int p[100000];using namespace std;int main(){ int T,A[305]; cin&gt;&gt;T; while(T--) { int N,flag=0...

2018-02-15 11:42:16 206

原创 H-请使用sort

还是结构体输入,排序,后输出,不过是使用了两次sort,因为要求倒序输出所得的答案#include &lt;iostream&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;#include &lt;cstdio&gt;using namespace std;struct q{ int num; double piao;}...

2018-02-15 10:14:31 217

原创 G-请使用sort

用map转化字符串与整型,自己写cmp使用sort,输出#include&lt;iostream&gt;#include&lt;algorithm&gt;#include&lt;map&gt;#include&lt;string&gt;#include&lt;cstdio&gt;using namespace std;struct p{ string name;//string函数...

2018-02-14 22:31:54 137

原创 X - Specialized Four-Digit Numbers

累加取余的数字,然后除,在累加。。。循环即可#include &lt;iostream&gt;using namespace std;int shier(int n){ int sum=0; while(n&gt;0){sum+=n%12;n/=12;} return sum;}int shiliu(int n){ int sum=0; while(n&gt;0){sum+=...

2018-02-14 21:44:08 99

原创 Z - A + B Problem II

一道降智版的大数加法,不包含负数,那简单啊字符串转int,按位相加倒序输出即可#include &lt;iostream&gt;#include &lt;cstring&gt;#include &lt;cstdio&gt;using namespace std;void swich(char A[],int B[],int n){ B[0]=n; for(int i=1;i&lt;...

2018-02-14 20:32:06 93

原创 Q-贪心

只需按攻击比血量的值降序排序,就是杀怪应该有的顺序#include &lt;iostream&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;using namespace std;struct p{ int hp; int dps; double bizhi;}q[1005];int cmp(p a,p b){ r...

2018-02-14 16:21:25 123

原创 P-贪心

做结构体,先按分数降序排,分数一样的话把deadline小的放在前面,先考虑,后面循环枚举的时候从分高的开始考虑,想办法把他们安排的可以做#include &lt;iostream&gt;#include &lt;algorithm&gt;#include &lt;cstring&gt;using namespace std;struct p{ int dl; int fen;}q...

2018-02-14 12:27:28 102

空空如也

空空如也

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

TA关注的人

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