- 博客(214)
- 收藏
- 关注
原创 剑指 Offer 12. 矩阵中的路径
class Solution {public: bool exist(vector<vector<char>>& board, string word) { rows = board.size(); cols = board[0].size(); for(int i = 0; i < rows; i++) { for(int j = 0; j < cols; j++) {
2021-01-06 14:37:00
222
原创 数据结构之---树
#include<iostream>#include<string>using namespace std;// 二叉树的遍历算法class Node {public: // 可以看出,c++中class如果不加声明,其默认成员是私有的。 int v; Node* left; Node* right; Node(int vs):v(vs),left(nullptr), right(nullptr){} // 注意这里的{}后不用加分号};typedef stru
2020-12-08 21:27:19
253
原创 智能指针
#include<iostream>#include<memory>using namespace std;int main() { // c++ 需要程序员管理堆内存、和资源(临界区,文件)的申请和释放 // 动态分配对象的生存期与他们在哪里创建是无关的,只有当显式的被释放时,这些对象才会销毁 // new:在动态内存中为对象分配空间并返回一个指向该对象的指针 // deleted:接受一个动态对象的指针,销毁对象,并释放与之关联的内存 int* p = new i
2020-09-21 15:56:00
243
原创 2020-09-21
reinterpret_cast:可以用于任意类型的指针之间的转换,对转换的结果不做任何保证dynamic_cast:这种其实也是不被推荐使用的,更多使用static_cast,dynamic本身只能用于存在虚函数的父子关系的强制类型转换,对于指针,转换失败则返回nullptr,对于引用,转换失败会抛出异常const_cast:对于未定义const版本的成员函数,我们通常需要使用const_cast来去除const引用对象的const,完成函数调用。另外一种使用方式,结合static_cast,可以..
2020-09-21 15:53:57
145
原创 多态与虚函数
#pragma once// 在类的定义中,前面有virtual关键字的成员函数就是虚函数class base{ virtual int get();};int base::get() {};// virtual 关键字只用在类定义的函数声明中,写函数体时不用// 构造函数和静态成员函数不能是虚函数// 析构函数应为虚函数/// 多态的表现形式一/// 1. 派生类的·指针·可以赋值给·基类指针·/// 2. 通过基类指针调用基类和派生类中的同名虚函数:/// 1)若该指针指向
2020-09-21 15:39:32
122
原创 c++ 之 extern
变量声明与定义的关系:声明:规定了变量的类型和名字,使得名字为程序所知。一个文件想要使用别处定义的名字则必须包含对哪个名字的声明。定义:为变量申请空间,还可能为变量附一个初始值。定义负责创建与名字相关的实体。如果想声明一个变量而非定义它,就在变量名前面添加关键字extern,且不要显式的初始化变量。eg.extern int i; // 声明i而不是定义int j; // 声明并定义j变量能够多次声明,却只能定义一次。一个const对象,如果想被外部文件使用必须声明为ext
2020-09-21 15:11:35
109
原创 TCP拥塞控制方法
慢开始-》拥塞避免-》快重传-》快恢复。概念:可靠通信停止等待:每发送一个分组,就停止发送,等待对方的确认,收到确认后再发送下一个分组。累积确认:接收方不必对收到的分组逐个发送确认,而是收到几个分组后,对按序到达的最后一个分组发送确认。超时重传:发送方过了一段时间(超时计时器到期)没有收到确认,就认为发送的分组丢失了,就重传前面的分组。可靠通信:使用确认和重传机制,TCP在不可靠的传输网络上实现可靠的通信。流量控制:滑动窗口: 以字节为单位的滑动窗口,包括了发送方的发送窗口和接
2020-09-21 11:35:05
338
原创 去除有序数组中重复项(原地)
STL源码剖析:vector<int> v{ 1,1,2,2,3,4,4,5 };int iter = 0;int end = v.size();int result = 0; while (++iter != end) { // 元素不同就记录,否则,就跳过 if (v[iter] != v[result]) v[++result] = v[iter];}v.resize(++result); // 去除了数组末尾废弃的元素。...
2020-09-20 17:13:04
263
原创 B+树和红黑树不要搞混了
B+树:用在磁盘文件组织 数据索引和数据库索引。红黑树:c++ STL中的 set 和 mapunordered_map:hash
2020-09-19 10:12:09
288
原创 哔哩哔哩编程题
脸滚键盘:#include<iostream>#include<string>#include<unordered_map>using namespace std;int main() { int n; string S; while (getline(cin, S)) { int i = 0; while (S[i] != ' ') { i++; }
2020-08-31 19:49:42
219
原创 求1 + 2 +... + n(待续)
代码1:class Solution {public: Solution(){N++; Sum+=N;} static void reset(){N = 0; Sum = 0;} static int getSum(){return Sum;}private: static int N; static int Sum;public: int sumNums(int n) { reset(); Solution *a =
2020-08-31 15:21:32
157
原创 c++函数指针作用
代码:#include<iostream>#include<string>using namespace std;// 函数指针使用的函数int max_value(int a, int b){ return (a > b) ? a : b;}//声明函数指针,此时函数指针没有指向任何函数int (*pFun)(int a, int b); int main(int argc, char** argv){ int max1, max2
2020-08-30 22:25:22
235
原创 c++ memcpy函数的实现
memcpy函数作用:将由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内,函数返回一个指向dest的指针特别说明:1.src和dest所指内存区域不能重叠2.与strcpy相比,memcpy遇到‘\0’并不会结束,而是一定会拷贝完n个字节3.memcpy可以拷贝任何数据类型的对象,可以指定拷贝的数据长度4.如果dest本身就有数据,执行memcpy()后会覆盖原有的数据5.dest和src都不一定数组,任意的可读写的空间均可6.如果要追加数据,则
2020-08-30 20:24:41
1760
2
原创 static:类的静态成员
#include<iostream>#include<string>using namespace std;class Account {public: void calculate() { amount += amount * interestRate; } // 成员函数不通过Account::就可以直接访问static成员 static double rate() { return interestRate; } // 这里不允许使用类的非静态成员,
2020-08-30 11:20:27
174
原创 删除链表第k个结点
// 删除链表第k个结点,输出剩余序列#include<iostream>#include<string>#include<vector>using namespace std;struct Node { int v; Node* next; Node(int n) { v = n; next = nullptr; }};int main() { int n, k; while (cin >> n >> k) {
2020-08-29 19:29:24
322
原创 c++中的const
const作用修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer);修饰引用,指向常量的引用(reference to const),用于形参类型,即避免了拷贝,又避免了函数对值的修改;修饰成员函数,说明该成员函数内不能修改成员变量。const 的指针与引用指针指向常量的指针(pointer to const)自身是常量的指针(常量指针,const pointer)引用指向常量的引用
2020-08-29 19:19:31
137
原创 设计模式
单例模式:单例模式的优点:减少内存开支减少系统调用避免资源的多重占用线程安全死锁:某台计算机连接了8个相同的设备,有N个进程在竞争使用,每个进程最多会同时占用3个设备,请问当N大于等于多少时,系统可能发生死锁?用户态&内核态以下哪种操作不会导致计算机从用户态切换至内核态?访问内存时出现缺页异常对一个变量进行取模运算创建一个子进程读取硬盘中文件的内容以下数据库事务的隔离级别中哪一个可能造成脏读读取未提交内容(Read Uncommited)读取提交内容(Read C
2020-08-27 14:38:54
341
原创 关于x&(x-1)的作用
x = x&(x-1):每执行一次x =x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。// 判断一个数字的二进制中有几个1#include<iostream>using namespace std;int main() { int x; while (cin >> x) { int count = 0; while (x) { x = x & (x - 1);
2020-08-26 15:31:34
343
原创 最大公约数的求法---辗转相除法
辗转相除法:辗转相除法是利用以下性质来确定两个正整数a和b的最大公因子的:1.若r是a÷b的余数,则gcd(a,b)=gcd(b,r)2.a和其倍数之最大公因子为a。3. 0 可以除尽任何数,所以0和任何数的最大公约数都是那个“任何数”另一种写法是:1.a÷b,令r为所得余数(0≤r<b)。若r=0,算法结束;b即为答案。2.互换:置a←b,b←r,并返回第一步。代码:#include<iostream>#include<vector>using na
2020-08-26 15:04:31
597
原创 简单的01背包问题
大疆面试的题目,一道01背包的题目只过了50%案例背包问题核心代码:vector<vector<int> > dp(n, vector<int>(n, 0));for (int i = 1; i < n; i++) { // 物品 for (int j = 1; j < n; j++) { // 容量 if (j - volume[i] > 0) { // dp[i][j] = max(dp[i - 1][j], dp[i][j
2020-08-26 11:10:20
174
原创 [数据结构]---链表哑结点
关于哑结点解释:使用方法#include<iostream>#include<vector>using namespace std;struct LinkNode { int val; LinkNode* next; LinkNode():val(0), next(nullptr) {} LinkNode(int v) : val(v), next(nullptr) {}};int main() { LinkNode Dum1; LinkNode*
2020-08-25 11:32:49
530
原创 c++中的内存对齐讲解
概念与原则:对齐值:基本数据类型的对齐值为其内存大小自定义类型(结构体/类)的对齐值为其类型递归取得的最大基本类型数组的对齐值为其基本类型,并不是整体内存大小偏移地址:第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员内存大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括struct/class/uinon。实例:1. 成员变量都是基础数据
2020-08-21 11:40:37
179
原创 C++面试知识点搜集
c++的类型转换extern "C"的用法? extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。 由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。 比如说你用C 开发了一个DLL 库,为了能够让C ++语言也能够调用你的DLL输
2020-08-19 15:49:19
243
原创 Linux
在 Linux 中查看 ARP 缓存记录的命令是?正确答案: A 你的答案: 空 (错误)“arp –a”“arp –d”“arp -L”“arp –D”解析:arp -a 查看缓存记录arp -d 删除某些内容
2020-08-19 15:10:48
309
1
原创 循环冗余检验CRC
前提:数据部分M(k个bit) and 商定除数P(n+1),n是冗余码的长度。发送的帧:数据部分+冗余码冗余码求法:M后添加n个0除以商定除数P得到余数R,R即冗余码R = 0,接受R ≠ 0,有错,丢弃例题:设M = 101001(k=6)n = 3,P = 1101冗余码:M∗2n/1101=101001000/1101=110101.....001M*2^n / 1101 = 101001000 / 1101 = 110101.....001M∗2n/1101=101
2020-08-18 10:30:42
347
原创 http
超文本传送协议(http)是一个应用层协议,它使用TCP连接进行可靠的传送。统一资源定位符URL:<协议>://<主机>:<端口>/<路径>http的默认端口是80http的URL:http://<主机>:<端口>/<路径>http是面向事务的。事务:事务就是指一系列的信息交换,而这一系列的信息交换是一个不可分割的整体,也就是说,要么所有信息交换都完成,要么一次交换都不进行。通过URL访问页面点击鼠标后发生的事
2020-08-18 09:59:41
588
原创 面试知识点集
数据结构算法图论单源最短路径(迪杰斯特拉算法)组成原理计算机数的表示法计算机操作系统计算机网络运输层TCP运输连接的建立和释放数据库理论设计模式C++基础未解决问题
2020-08-17 21:30:20
136
原创 数据结构之排序算法
文章目录一 、排序基本概念二、排序算法思路与代码实现2.1 简单排序2.1.1冒泡排序2.2.1 插入排序2.2 先进排序2.2.1快速排序2.2.2 归并排序2.2.3 堆排序2.3 基数排序一 、排序基本概念稳定性:假设两个值(a1,a2a_1,a_2a1,a2)相同,如果经过某一排序算法排序后两值的前后顺序不会发生改变,则称之为稳定排序,否则,为不稳定排序。复杂度:简单排序:时间复杂度为O(n2)O(n^2)O(n2)先进排序:时间复杂度为O(nlogn)O(nlog
2020-08-17 21:29:55
266
原创 求最短路径
单源最短路径从源点到终点的路径可能存在三种情况:1. 没有路径 2. 只有一条路径 3. 有多条路径迪杰斯特拉(Dijkstra)思路:按照路径长度递增的次序从源点到终点的路径。假设Graph[][]Graph[][]Graph[][]为有向网的邻接矩阵,SSS为已找到最短路径结点的集合,其初始状态为只含一个顶点,即源点。另设一个一维数组Dist[n]Dist[n]Dist[n],其中每个分量表示当前所找到的从源点出发(经过集合S中的顶点)到各个终点的最短路径长度。显然,DistDistDist
2020-08-17 16:27:23
245
原创 TCP运输连接的建立和释放
运输连接的三个阶段:建立连接数据传送连接释放TCP报文首部字段:序号seq:本报文段所发送的第一个字节的序号。确认号ack:期望收到对方下一个报文的第一个数据字节的序号。例如B正确收到了A发送的一个报文段,其序号字段值是501,而数据长度是200字节(501~700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号为701,于是B在发送A的确认报文中把确认号置为701.- 即:若确认号 = N,表明到序号N-1的所有数据都已正确收到。确认
2020-08-16 17:58:18
232
原创 计算机数的表示法
文章理解自这里前提:计算机的运算器中只有加法器没有减法器。数据在计算机中是二进制表示的。想当然的原码表示法:1:用符号位区分正负数2:正数-正数 == 正数 + 正数的相反数:1 - 1 = 1 + (-1) = 0假如我们有一个4位的机器,因为数字有正负数和零值,因此想当然的我们把最高位设置为符号位0代表正数,1代表负数,后面位为二进制数值的表示,例如1:0001,-1:1001,这种表示法即为原码。下面我们来验证原码表示法的实用性:正数+正数:0001+0010=0011 (1+
2020-08-16 16:11:11
646
原创 计算机网络
TCP协议在常见的七层网络模型中属于哪一层?UDP是一种无连接的网络协议,那么一下哪个选项不是UDP协议报头的内容?序号(Sequence Number)源端口号(Source port)和目标端口号(Destination port)报文长度(Length)校验和(Checksum)...
2020-08-13 21:56:54
662
原创 操作系统
如果想列出当前目录以及子目录下所有扩展名为“.txt”的文件,那么可以使用以下哪个命令?find . -name “.txt"grep “.txt” -r *ls ".txt”less “*.txt”
2020-08-13 21:56:37
729
原创 可视化的设置信号与槽,确定、取消和退出
在窗体中推入三个push button,text 依次改为确定、取消和退出点击.ui文件,切换到页面设计界面,然后点击下图的第二个按钮(F4)然后在弹出的对话框的下方在显示继承自窗体的函数前面打上对勾,左栏选择clicked(),右栏对应的选择accept(),reject()和close()函数。3. 点击上图第一个图标(F3),退出这种状态。...
2020-05-02 09:42:42
577
原创 泛型算法之-排序
实现简单的vector的逆序排序和去重#include <iostream>#include <vector>#include <algorithm>using namespace std;bool comp(int a, int b){ return a > b;}int main(){ int n; int i; cin&...
2020-03-07 10:46:50
242
原创 学习union(联合体)总结
要点:任意时刻只有一个值可以有值,给其中一个成员赋值后,其他成员自动变为未定义状态。union的对象的存储union不能含有引用类型的成员c++11中,含有构造函数和析构函数的类型可以作为其成员(复杂,这里不讨论)可以为其成员指定为public、protected、private等保护标记,默认为public可以有匿名union练习题:关于union的内存分配:eg.1#i...
2020-03-06 09:24:09
551
原创 牛顿法算平方根的理解
原题目:x 的平方根查看题解,使用到了牛顿法。公式:作者已经讲得很清楚了,只是看这里的公式中的xxx和x0x_0x0的时候卡了一下,后来理解了,其实x0x_0x0就是进行尝试的起始点,然后进行图中的迭代公示后得到的x0x_0x0(其实就是所求的xxx)是下一次的起始点,在图中就是那条斜线与xxx轴的焦点的位置。那么,如果一个值的平方考虑到可能会溢出的话,如何避免计算平方值呢?代码中写...
2019-12-23 17:58:15
209
原创 pandas填充(扩增)数据
将数据按照时期使用平均值填充import osimport numpy as npimport pandas as pddef extent_data(begin, end, len_data): """ :param begin: :param end: :return: """ d = get_d(begin,end,len_data...
2019-12-20 17:24:15
1768
原创 ubuntu 16.04 创建anaconda虚拟环境
刚进入的话,应该是base环境。如果之前已经建立好了虚拟环境,可以使用语句2查看,用你语句3进入。1. conda create -n env_name python=3.6 # env_name:给要建立的虚拟环境取一个名字 2. conda env list # 查看当前有哪些已经建立的虚拟环境3. conda activate env_na...
2019-08-09 10:44:45
221
原创 ubunt 16.04安装搜狗输入法
网上找到一个deb包找到下载到的文件夹,在空白位置右键:在终端打开输入1. sudo apt-get update2. sudo apt-get install -f3. sudo dpkg -i sogoupinyin_2.0.0.0072_amd64.deb(根据自己的版本改变名称)由于我的输入法已经是fcitx了,所以只要重启就ok了。...
2019-08-09 09:57:09
232
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人