05 2020 档案
摘要:#include<iostream> #include<thread> #include<mutex> #include<atomic> using namespace std; mutex g_mutex; atomic<bool> isok = false; void func(int id)
阅读全文
摘要:在许多时候,我们会有这样的需求——即我们想要得到线程返回的值。但是在C++11 多线程中我们注意到,std::thread对象会忽略顶层函数的返回值。 那问题来了,我们要怎么获得线程的返回值呢? 我们通过一个例子来说明如何实现这个需求。用多个线程计算(a+b)/ (x+y) 的值 有两种方法,分别是
阅读全文
摘要:一、GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。 二、gdb调试命令 以t
阅读全文
摘要:简单生产者消费者模型 #include <iostream> #include <queue> #include <thread> #include <mutex> #include<atomic> #include <windows.h> #include <condition_variable>
阅读全文
摘要:class Solution { public: int result; int maxPathSum(TreeNode* root) { if (!root) return 0; result = root->val; dfs(root); return result; } //dfs递归求解以r
阅读全文
摘要:一、什么是构造函数初始化列表 构造函数初始化列表,是在构造函数的基础上,后面以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如: class A { public: int a; int b; //一般的构造函数 A(int x, int y) { a
阅读全文
摘要:一、什么是异常处理 一句话:异常处理就是处理程序中的错误。 程序运行时常会碰到一些异常情况,例如: 1、做除法的时候除数为 0; 2、用户输入年龄时输入了一个负数; 3、用 new 运算符动态分配空间时,空间不够导致无法分配; 4、访问数组元素时,下标越界;打开文件读取时,文件不存在。 这些异常情况
阅读全文
摘要:static static,规定此局部变量只在当前模块(文件)中可见.,static规定其为静态存储方式,该变量允许被修改,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放; const const关键字可以修饰变量、对象、函数等 只读的全局变量,只允许被初始化一次,其值不可修改. sta
阅读全文
摘要:class Solution { public: vector<int> inorderTraversal(TreeNode* root) { stack<TreeNode*> s; vector<int> v; TreeNode* now = root; while (now != NULL ||
阅读全文
摘要:使用两个栈来协助完成二叉树的遍历操作。 不难发现,如果我们以“根->右->左”的顺序遍历二叉树,将结果压进栈中,弹栈的时候顺序就是“左->右->根”,也就是后序遍历的结果了。 而“根->右->左”的遍历顺序和先序遍历很像(先序遍历是“根->左->右”) 用stack1协助,对每个结点依次将“根->右
阅读全文
摘要:class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; //注意判断根为空的情况 if (root == NULL) return res; queue<Tr
阅读全文
摘要:堆的定义 堆就是一棵可以自我平衡的完全二叉树 优先队列的底层数据结构就是堆,实现和堆基本一样 由于堆存储在下标从0开始计数的数组中,因此,在堆中给定下标为i的结点时: 如果 i = 0,结点 i 是根结点,无父结点;否则结点 i 的父结点为结点 [(i - 2) / 2] 如果 2i + 1 > n
阅读全文
摘要:一、C++是C的升级,为啥两者不能直接相互调用? 1、我们知道,代码从编写,到能执行之前,仍需要经过编译(.obj)、链接阶段(.exe)。通常,编译每一个单元文件会生成目标文件, 然后链接器会把各个目标文件链接起来生成可执行性文件。 2、链接器之所以能把目标文件相互之间链接起来,就是通过查找目标文
阅读全文
摘要:变量定义 变量定义使用“数据类型+变量名称”的形式,编译器需要给他分配内存单元的; 变量声明 声明的时候不能赋初值,否则就变成定义了 而变量声明使用“extern 变量类型+变量名称”的形式,是告诉编译器我这个变量将在其他外部c文件中定义,我这里只是在外部用它。编译器就不给他分配内存空间,而等到真正
阅读全文
摘要:#include<iostream> using namespace std; class parent { public: parent() { cout << "父类构造" << endl; } ~parent() { cout << "父类析构" << endl; } }; class chi
阅读全文
摘要:当一个元素要入栈时,我们取当前辅助栈的栈顶存储的最小值,与当前元素比较得出最小值,将这个最小值插入辅助栈中(min_stack.push(min(x,min_stack.top())) 当一个元素要出栈时,我们把辅助栈的栈顶元素也一并弹出; 在任意一个时刻,栈内元素的最小值就存储在辅助栈的栈顶元素中
阅读全文
摘要:dfs递归枚举每个点分片段的数字是否合法 class Solution { public: bool isValid(string ip) { int val = stoi(ip); if (val > 255) return false; if (ip.size() >= 2 && ip[0] =
阅读全文
摘要:先用栈判断括号匹配,在把所有匹配的括号标记为0,然后求最长的0序列 class Solution { public: int longestValidParentheses(string s) { int len = s.length(); int ans = 0; stack<int>p; for
阅读全文
摘要:简单介绍: 环形缓冲区就是在最开始的时候申请一个大buffer,有一个读指针,一个写指针,随着数据写入和读取改变读写指针,具体分为三总情况: 1、是读写速度差不多,这种情况比较简单。 2、写的很快读的慢、这种情况写指针很快回头追上了读指针,这时候就会出现写buffer覆盖掉读指针的内存块,如果还继续
阅读全文
摘要:重点介绍一下resize()扩容和reserve()两个函数 resize() resize()扩容的默认构造的方式是0, 之后插入按照1 2 4 8 16 二倍扩容。注(GCC是二倍扩容,VS13是1.5倍扩容。原因可以考虑内存碎片和伙伴系统,内存的浪费)。 扩容后是一片新的内存,需要把旧内存空间
阅读全文
摘要:一、数组模拟栈 #include <iostream> #include<string.h> #include<string> #include<stdio.h> #include<vector> #include<math.h> using namespace std; template<type
阅读全文
摘要:因为要求时间和空间都要在O(n)内,所以用下标标记每个数是否出现,然后再顺序遍历,输出第一个下标未被标记的数,这种方法是不行的 应该遍历一边数组,判断 nums[nums[i] - 1] != nums[i](下标从0开始),如果不在,则交换num[i]和num[num[i]-1]。 我们的思路是把
阅读全文
摘要:中序遍历输出二叉树是一个递增的序列 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val
阅读全文
摘要:矩阵快速幂 #include <iostream> #include<string.h> #include<stdio.h> using namespace std; class Solution { public: typedef long long ll; const ll mod = 1000
阅读全文