![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c++学习笔记
c++
氯的平方
大一新生,写点东西抗遗忘
展开
-
L2-035 完全二叉树的层序遍历
#include <iostream>#include <algorithm>using namespace std;const int Maxn = 2e5 + 10;int n;int tree[Maxn]; // 数组模拟好处就是顺序输出数组即为BFS顺序void Create(int t) { // 后序遍历输入数据到树里面即可 if(t > n) { return ; } else { Crea原创 2021-04-22 16:37:51 · 143 阅读 · 0 评论 -
根据前序遍历结果和中序遍历结果建立二叉树
#include <iostream> #include <algorithm> #include <queue>#include <set>using namespace std;const int Maxn = 100;typedef struct Node { int data = 0; struct Node *Left_node = NULL; struct Node *Right_node = NULL;原创 2021-04-22 14:53:06 · 90 阅读 · 0 评论 -
BFS 实现指数型递归
// BFS 实现指数型递归#include <iostream>#include <algorithm>#include <string>#include <vector>#include <set>#include <queue>using namespace std;const int N = 100 + 10;int n,k;string str;set<string> s; // 因为原创 2021-04-08 21:44:39 · 184 阅读 · 0 评论 -
二叉搜索树的建立与父亲节点的查询
#include <iostream>#include <algorithm>#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define LL long longusing namespace std;const int N = 1e6 + 10;int num[N],n;typedef struct TreeNode{ int val; TreeNode *LChild,*R原创 2020-12-03 17:29:06 · 507 阅读 · 0 评论 -
2020-10-03
记录一道关于数学知识的题目:(也是一种看待数字的方式)题目:给您一个由n个整数a1,a2,…,an组成的数组 。 在一个操作中,您可以选择数组中的两个元 素,然后用等于其总和的元素替换它们(插入新元素的位置无关紧要)。例如,从数组[2,1,4] 您 可以获得以下数组:[3,4],[1,6]和[2,5] 。 您的任务是找到执行此操作任意次(可能为零)次后, 数组中能被3整除的元素个数的大值。The first line contains one integer t (1 <=t <= 100原创 2020-10-03 20:17:03 · 88 阅读 · 0 评论 -
组合数初探
组合数公式(在数据范围不是很大的情况下不会爆TLE的一个模板)long long Zue(ll n,ll x) // 组合 // x == k n == n{ ll res = 1; ll num = n; ll fz = 1,fm = 1; for(int i = 1;i <= x;i++) // fz为 1 * 2 * 3 * .....* k 下面要乘 k 次 // f2为 n * (n - 1) * (n - 2) * ... * (n - k + 1)原创 2020-10-01 20:46:29 · 77 阅读 · 0 评论 -
模板类实现栈
#include<iostream>using namespace std;template<typename T> class stack;template<typename T> class stack_elm{public: stack_elm() : date(0),next(0) { } friend class stack<T>;private: int date; stack_elm<T>* next;};原创 2020-09-29 21:00:40 · 250 阅读 · 0 评论 -
模板类实现队列
#include<iostream>#include<cassert>using namespace std;template<class Type> class queue; // 提起声明 方便引入其作为友元函数template<class T> class queueitem { // queue的节点定义public: queueitem(const T& data) : item(data),next(0) { } frie原创 2020-09-29 16:57:00 · 477 阅读 · 0 评论 -
无括号版本的(自己实现的运算表达式)(Stack不用STL的函数)
#include<iostream>#include<string>#include<algorithm>#include<iomanip>#include<conio.h>#include<vector>using namespace std;const int N = 1e5 + 10;int a[200];typedef struct Stack{ char date; Stack *next; }St原创 2020-09-27 23:15:38 · 101 阅读 · 0 评论 -
OVS and OPTR (无括号版本)
#include<iostream>#include<stack>#include<string>#include<algorithm>#include<iomanip>#include<conio.h>#include<vector>using namespace std;const int N = 1e5 + 10;int a[200];int main(void){ ios::sync_wi原创 2020-09-27 22:01:11 · 154 阅读 · 0 评论 -
静态链表
#include<iostream>using namespace std;const int Max_size = 10;typedef struct { int date; int cursor;}component,StaticList[Max_size];// 空闲节点链表和现存链表共存,只是空闲节点链表的连接逻辑和现存链表完全分开(2条链) void Ini(StaticList space,int *av) // space是包含了头节点的整个链表的存储容原创 2020-09-27 17:01:35 · 54 阅读 · 0 评论 -
cin 与 scanf 的差速补偿
在实际的代码过程中,cin可能比scanf要慢上一倍。通过加上:ios::sync_with_stdio(false); //来使cin获得和scanf一样的速度原创 2020-09-03 20:25:01 · 142 阅读 · 0 评论 -
ZY哥的快速幂
void quick_power(int x,int y){//x为底数,y为指数 int ans = 1; while(y){ if(y & 1 == 1) ans += x; x = x * x; y >>= 1; } cout<<ans<<endl;}原创 2020-09-03 19:10:40 · 90 阅读 · 0 评论 -
对Delete指针 和 链表中删除操作的一些理解
#include<iostream>using namespace std;typedef struct Node{ char data; Node* next;}Node,*LinkList; //链表结构单元的声明void InitList(LinkList* L) //参数是链表结构单元的二级指针 初始化函数没有返回值{ *L = (LinkList)malloc(sizeof(Node)); (*L)->next = NULL;}void creat原创 2020-09-03 11:12:25 · 1004 阅读 · 0 评论 -
引用计数 和 写时复制计数
//如果类中包含指针成员,在设计赋值运算符或拷贝构造函数时,应该赋值指针所设计的一切,即为深复制。//但是如果对象需要大量的内存,为了改善性能,可能会希望避免这种深复制的操作,如果直接使用浅复制,直接进行指针的复制,指针成员会共享底层数据,两个对象无法独立进行修改。//解决这种问题的方式为浅复制和引用计数://即让一个内存单元知道有几个对象正指向它,如果只有一个,则可以自由进行写操作,否则就需要进行真正的深复制,为自己创造一个副本进行写操作,且断开于之前的存储单元的联系。//使用内置指针实现引用计原创 2020-07-27 21:59:21 · 174 阅读 · 0 评论 -
隐式类型转化构造函数
//隐式类型转换构造函数//定义:用一个实际参数调用的构造函数为类型转换构造函数 可以将参数类型转换为类类型 //如: class X{ int m; public: X(int v) : m(v)//类型转换构造函数 将int型的数据转化为X类型的数据 { }}; void f(X obj){ }int main(){ int iv = 10; f(iv); //正确 调用X(int)进行隐含的参数类型转化 X obj1(iv);原创 2020-07-17 22:10:50 · 182 阅读 · 0 评论 -
默认初始化构造函数
//默认构造函数//定义: 可以不通过提供任何实际参数就能调用的构造函数称为默认构造函数//如果定义了一个数组 但是没有提供初始值//如:X ax [100];//如果类X 没有默认构造函数 则会产生编译错误//实例:class X{ public: X() { m = 0; n = 0; }//默认构造函数 X(int v) { m = v; n = 0; }//构造函数 X(int v1,int v2) { m = v1;原创 2020-07-17 21:57:04 · 615 阅读 · 0 评论 -
对象的初始化的例子函数
//对象的初始化和销毁#include<utility> //定义重载关系运算符 简化关系运算符的写入和pair类型#include<bits/stdc++.h>using namespace std;class HaveAll{ public: HaveAll() : member(0) // 默认初始化函数 { cout<<" default constructor "<<member<<endl; }原创 2020-07-17 21:45:11 · 233 阅读 · 0 评论 -
类的学习笔记
C++拓展了结构体的概念,其可以包括函数作为自己的成员函数,结构体中的书数据称为数据成员。这样的结构体类型称为类,这种结构体变量称为对象。例如:struct data{ string productno; double price; unsigned unitsold; //数据成员的声明和定义 (均为public类型) //函数成员的声明和定义 double total() { return price * unitsold;//在同一类中 函数可以自由访问类中的数据成员 (无需再原创 2020-06-07 16:25:55 · 148 阅读 · 1 评论 -
稳定排序 + 解结构体成员sort排序
题目:PTA 单词排序最开始写这道题的时候 直接上来写了sort排序 被卡在了第三个测试点 很难受查资料才知道 sort的排序是不稳定的 就拿这道长度排序题来说的话 apple 和 winter的长相同 直接sort的话 排序完了以后 apple可能在winter前面 也可能在winter后面 是不稳定的,这个地方徐要的排序手法是稳定排序 std::stable_sort 用法和sort一模一样 不过多解释#include<bits/stdc++.h>using namespace原创 2020-05-18 17:04:30 · 174 阅读 · 0 评论 -
图的学习笔记
图A -> B 为一条弧 其中 A为头也被称作终端点,B为弧尾 这是一条有方向的弧 由这样的弧构成的图称为有向图 A B均称为顶点。/如果<A,B> 和 <B,A> 同时存在与图中 则用 (A,B)来代替这一个有序对,表示A,B中的一条边,此时的图称为无向图1.无向图中边的数目的取值范围是:0 - n*(n - 1)/ 2 如果取最大值 则这个无向图称为无向完全图2.有向图中边的数目的取值范围是:0 - n*(n - 1) 如果取最大值 则这个有向图称为有向完全图3.原创 2020-05-17 17:36:00 · 242 阅读 · 0 评论 -
vector的基本使用方法(c++primer总结)
#include<iostream>#include<vector>//using std::vector;using namespace std;int main(void){ //vector 的对象的类型可以为vector类型 vector<int> v1(10);//v1 中有10个值为0的元素 vector<int>...原创 2020-04-05 22:06:20 · 207 阅读 · 0 评论 -
2.4.2 指针和const
指向常量的指针 不可以用于修改所指向对象的值存放常量对象的地址只能使用指向常量的指针如:int *const a = &A;从右向左进行理解,首先就是const表示为常量类型,后是 * 表示为指针类型 组合就是常量指针类型,不能改变的是a所指向的对象 要与 const int *a 进行区分 后者先是指针类型 后是常量类型 组合是指针常量类型 即为a的指向不可以修改对象能否被改变与指...原创 2020-03-08 20:52:54 · 60 阅读 · 0 评论 -
2.4 const 限定符号
用const限定的变量类型不可以修改其值,因此const声明的对象必须要初始化const对象可以执行处了修改变量值的操作以外的所有操作,也可以转换为一个boo类型的值可以用不是const的对象来初始化const对象如果程序包含多个文件 则每个 使用到了const对象的地方都要使用对应的声明(extern),否则 默认const对象只在文件内有效,其他文件中的同名const对象为新的const...原创 2020-03-08 20:23:18 · 201 阅读 · 0 评论 -
2.4.1 const的引用
将引用绑定在cosnt对象上,称为对常量的引用,对常量的引用依旧不可以修改它所绑定的对象如:const int c = 1024;const int &c1 = c; //引用与其对象的类型都是const int 类型 匹配不可以将int型引用绑定在const int 的对象之上初始化常量时允许使用任意类型的表达式作为初始值 只要表达式的结果可以转换为引用的类型即可(因此可以把c...原创 2020-03-08 20:37:50 · 87 阅读 · 0 评论 -
2.3.3 理解复合类型的声明
定义包含一个基本数据类型(只有一个) 和 一组声明符(可以多样化)类型修饰符号与基本数据类型不是一体的 如:int * a ,* 仅仅修饰了a,对其他变量没有影响。理解变量的类型最简单的方法就是从右向左理解修饰符号的含义如:int *&P = p;首先是&表明P是一个引用,而 * 则表示P的类型是一个指针型的,所以P是一个指针的引用...原创 2020-03-07 21:56:49 · 83 阅读 · 0 评论 -
2.3.2 指针
指针的声明符为 : *d d为变量的名称指针存放某个对象的地址,若要获取地址,就需要使用取地址符 : &如:int a = 2;int A = &a;引用不是对象,没有实际的地址,没有引用的指针指针的类型要与所指向对象的类型严格匹配(有两种情况除外),否则对该对象的操作会引发错误,指针的类型实际上被用于指定其指向对象的类型。指针的值:1.指向一个对象;2.指向紧邻...原创 2020-03-07 21:47:56 · 65 阅读 · 0 评论 -
2.3.1引用
引用的声明符为: &d (d为变量名称)且 引用必须被初始化int a = 2;int &b = a;int &c;错误 没有初始化引用与初始值进行绑定 且 无法将该引用重新绑定到其他的对象上引用只是已经存在的变量的别名,对引用的操作都是发生在与之绑定的对象上的引用不是对象 没有引用的引用引用的类型与绑定对象要严格匹配 且 无法绑定字面值 或者 计算的结果(不...原创 2020-03-07 21:24:13 · 70 阅读 · 0 评论