C++
BOWWOB
社畜
展开
-
set和map和unordered_set 和unorded_map 的基本操作
1.set和unordered_set的①插入②读取③删除④创建一个降序set这俩都是键不重复的集合,有序无序顾名思义。使用erase(迭代器=find());删除一个键使用*find(键号);访问对应键#include<iostream>#include<set>#include<unordered_set>using namespace std;int main(){ set<int>st; unordered_set&l原创 2020-09-13 01:09:30 · 520 阅读 · 0 评论 -
c++ vector二维数组的定义和插入 固定和可变大小
固定大小:#include <iostream>#include <vector>using namespace std;int main(){ int row, column; cin >> row >> column; //key code:申请空间 vector<vector<int> > a(row, vector<int>(column)); //使用空转载 2020-08-06 02:28:31 · 3463 阅读 · 0 评论 -
C++STL全排列函数的使用
把数组的顺序当作全排列最小的数开始:#include <iostream>#include <cstring>#include <algorithm>using namespace std;int a[3] = { 2,5,0 };int main() { cout << "从5 2 0开始 一直增大:" << endl; do { for (int i = 0; i < 3;i++) {原创 2020-07-12 19:08:24 · 203 阅读 · 0 评论 -
n个数 的gcd最大公约数 以及lcm最小公倍数
#include <iostream>#include <cstring>using namespace std;/* gcd lsm*/int gcd(int a, int b) { return !b?a:gcd(b, (a % b));}int lcm(int a,int b) { return a * (b / gcd(a, b));}int main() { int a[4]; int lcm1=1;原创 2020-07-12 18:51:44 · 168 阅读 · 0 评论 -
java与C++类似的地方(笔记)
1 java abstract 与 C++ virtual2.java interface类与 C++纯虚函数3.java fina 与 c++ const4.java 深浅拷贝,clone 与 C++ 深浅拷贝5.java TreeSet,c++ set6.java comparator ,c++ cmp函数7.java comparable ,c++ 一元谓词,仿函数8.java char Unicode编码, c++ ASCII编码9.java 数学函数与常量PI的使用,M原创 2020-06-09 10:18:31 · 323 阅读 · 0 评论 -
数据结构与算法学习之分析排序算法时间的复杂度
本人的数学功底不是很好,如果有说得不好的地方请大佬指正。这里需要已经对这些排序算法理解了,才能听得懂我讲得复杂度问题.我不会再介绍他的具体动作.排序源码传送门时间复杂度:最内层循环的语句执行的次数。冒泡排序:最优状态:已经是我们所需的序列,外层for循环 第一轮,利用flag,因为已经是目标序列,所以第一轮内层for循环执行了一轮后,无任何元素交换,因此通过flag直接中断,跳出最外层循环,此时我们只执行了n-1次内层的for循环。结论:最优状态时冒泡排序的时间复杂度为O(n)。如原创 2020-06-06 21:37:31 · 209 阅读 · 0 评论 -
单调队列解滑动窗口-C++实现
传送门----滑动窗口解析和 C实现代码#include <iostream>#include <deque>using namespace std;const int N = 1000000;int n,k;//存储下标deque<int> min_v, max_v;int a[N + 10];int big[N+10];int small[N + 10];int arr = 1;void input() { cin >>原创 2020-06-06 01:50:10 · 540 阅读 · 0 评论 -
堆排序算法-数据结构与算法
堆排序分为两类:1.大顶堆:父的顶点比孩子结点都大。2.小顶堆:父的顶点比孩子结点都小。举例大顶堆:1.我们使用的是顺序存储【数组】,按层次存储(从上至下,从左至右),那么我们的编号的关系是:若父节点下标为key,那么左孩子结点的下标为2key,右孩子则为2key+1。 (因为右孩子在左孩子右一个位置,我们又按照层次顺序存储,所以左孩子+1等于右孩子)。2.我们拿到的也是一个数组,但是初始状态并不一定满足大根堆【不是大根堆】,所以我们要维护这个数组,对他进行调整。对初始数组的调整的过程原创 2020-06-04 14:18:08 · 202 阅读 · 0 评论 -
考研数据结构算法代码复习- 个人分类记法
负一:动态生成顺序表(栈.队列也是同样道理)+扩容零:1拆n①链表一.2逆转:①顺序表逆转②链表逆转-3指针法 //王道视频还是啥的讲过另一个方法二.5合并:顺序表合并①开辟空间②不开辟链表合并③开辟空间④不开辟⑤.2路-归并排序三.2排:归并排序-快排-执行时刻相反四.维护一个一维数组1.prim2.dijkstra五.维护一个队列1.bfs2.topological_sort六.维护一个二维数组floyd七.并查集 kruscalfather〔〕 fin原创 2020-06-03 13:48:04 · 380 阅读 · 0 评论 -
topological-拓扑排序-图
topological:1.把所有indegree为0的顶点入队2.当队不为空获取队头元素,并出队,记录。使用队头元素找到相邻的边后 使该点入度-1判断indegree为0入队--------- 当count为n时 拓扑成功-----------否则 失败 因:成环源码:#include <iostream>#include <algorithm>#include <limits.h>using namespace std;const int N原创 2020-06-02 22:17:57 · 160 阅读 · 0 评论 -
prim-普利姆算法-MST-最小生成树
prim对于顶点集的操作:源码:#include<bits/stdc++.h>using namespace std;const int adjacent_matri_max=1000;int vertex_num,edge_num; //顶点数量 边数量int price=0; //最小生成树代价 int adjacent_matri[adjacent_matri_max][adjacent_matri_max]; //邻接矩阵bo原创 2020-06-02 22:16:21 · 281 阅读 · 0 评论 -
Kruscal-克鲁斯卡尔-MST-最小生成树
Kruscal:运用并查集实现最好使用heap sort源码:#include <iostream>#include<algorithm>using namespace std;const int N=1000;/* run this program using the console pauser or add your own getch, system("pause") or input loop */struct EDGE{ int u,v,cost;原创 2020-06-02 22:14:05 · 123 阅读 · 0 评论 -
dfs-深度优先搜索-图
DFS:设置出口: count==n找邻接点为通路递归DFS i源码:#include <iostream>#include <cstdlib>using namespace std;/*注意 遇到不连通的图 (类似森林的图) 要加一个DFStravel函数 因为会遍历不到另一个连通块从这个函数开始 而不是DFS函数void DFSTravel(){ for(所有顶点) if(!vis) DFS()}*//* ru原创 2020-06-02 22:11:32 · 123 阅读 · 0 评论 -
bfs-广度优先搜索-图
BFS:通过维护一个queue,完成图的遍历。首先入队一个顶点v,然后循环操作:把v顶点的邻接点放入queue中出队时访问,把v设为出队的顶点。源码:#include <iostream>#include <queue>#include <cstdlib>using namespace std;/* run this program using the console pauser or add your own getch, system("pau原创 2020-06-02 22:08:46 · 167 阅读 · 0 评论 -
弗洛伊德floyd
floyd#include <iostream>#include <algorithm>#include <limits.h>using namespace std;const int N=100;int map[N][N];void init(){ for(int i=0; i<N; i++) { for(int j=0; j<N; j++) { map[i][j]=9999; } }}void floyd原创 2020-06-02 22:05:23 · 113 阅读 · 0 评论 -
迪杰斯特拉算法-Dijkstra-数据结构
Dijkstra:单源到多源的最短路径算法维护一个dist数组,每次在dist数组中寻找一个最短的且未访问的顶点,去更新其他剩下的顶点,直到所有的顶点都访问完毕。源码:#include<iostream> #include<algorithm>#include<cstring>#include<climits>using namespace std;const int N=100;/* run this program using the原创 2020-06-02 22:04:13 · 329 阅读 · 0 评论 -
并查集-实现-kruscal-最小生成树-模板-源码
kruscal本人手撸源码:(sort要改成堆排序,不要使用普通的排序)撸题传送门#include <iostream>#include<algorithm>using namespace std;const int N=1000;/* run this program using the console pauser or add your own getch, system("pause") or input loop *///收集边集struct EDGE原创 2020-06-02 13:56:16 · 186 阅读 · 0 评论 -
STL vector 和 list 的内部结构分析
STL vector 和 list 的内部结构vector: (俗称:动态数组)使用方式:#include <vector> //要先含入vector的头文件#include <algorithm>int main(){ //每次创建一个vector对象需要给一个泛型,指定vector存储的数组类型 //以下演示三种创建vector的方法 vector<string> sv; //调用无参构造函数,创建一个空的vector 名字为sv vec原创 2020-06-02 13:41:13 · 330 阅读 · 0 评论 -
STL源码copy_backward函数
copy_backward这个是拷贝函数,拷贝后的顺序是一样的,只不过拷贝的方式是从尾部开始拷贝,这一点不同寻常而已。原创 2020-06-02 06:47:42 · 181 阅读 · 0 评论 -
C++ delete 和 deallocate 的区别
delete 和 deallocate 的区别delete是释放动态内存成员函数中 new的动态内存deallocate是释放对象内存成员所占的内存using namespace std;class preson{public: person(){ ptr=new int[10]; } ~person(){ delete ptr;}private: int *ptr;};int main(){ while(1){ Person *p=new person;原创 2020-06-01 18:37:13 · 2068 阅读 · 1 评论 -
STL源码-placement操作 -construct( T1 p , const T2& value) new(p) T1(value)
construct函数的本意是叫做 placement操作原话:construct( T1 p , const T2& value) new§ T1(value);在p指向的位置创建一个类型为T1的对象,方式是调用T1的有参构造函数,参数为T2传过来的值举个简单的例子:如果是vector调用construct( end() , const T& value) new(end() ) T(value);end()返回的是finish,finish原型就是vector类型,原创 2020-06-01 18:20:22 · 226 阅读 · 0 评论 -
滑动窗口-普通队列以及单调队列解法
滑动窗口的普通队列单调队列的这篇文章倾向于自用-代码是手撸源码,可以运行普通队列用i j作为窗口的边界维护i到j ,找到以i到j为边界的min 和 max 并保存下来即可。时间复杂度O(n^2) 不能AC#include<iostream>using namespace std;const int N=1000000;int a[N+10];int n;int k;int min_a[N+10];int max_a[N+10];int sum=0;void so原创 2020-05-31 20:24:50 · 350 阅读 · 0 评论 -
读 侯捷 ‘读侯捷大师的more effectiveC++ 35个改善程序设计的有效方法 有感
more effectiveC++ 35个改善程序设计的有效方法 个人理解读侯捷大师的more effectiveC++ 35个改善程序设计的有效方法 有感详情请自行获取原著阅读。读侯捷大师的more effectiveC++ 35个改善程序设计的有效方法 有感详情请自行获取原著阅读。1.不要重载&& || ,2.使用references:①当你知道你需要指向某个东西,而且绝不会改变指向②当你实现一个操作符而语义(注意)无法达到要求其它情况使用pointers。...原创 2020-05-31 11:47:28 · 242 阅读 · 0 评论 -
读 侯捷 ‘ effectiveC++ 55个改善程序设计的有效方法 有感
effectiveC++ 55个改善程序设计的有效方法 个人理解读侯捷大师的effectiveC++ 55个改善程序设计的有效方法 有感详情请自行获取原著阅读。只看懂了部分,以下是我重新描述的11个方法(部分是书中原话)读侯捷大师的effectiveC++ 55个改善程序设计的有效方法 有感详情请自行获取原著阅读。只看懂了部分,以下是我重新描述的11个方法(部分是书中原话)1.把C++视为四个部分①C②面向对象部分③模板编程④STL2.确定对象被使用前已经被初始化3.了解C++默默编写并原创 2020-05-31 11:42:10 · 341 阅读 · 0 评论